PHP脚本没有解释就被杀死了

时间:2013-12-11 13:17:06

标签: php bash putty

我以下列方式启动我的php脚本:

bash  
cd 'path'   
php -f 'scriptname'.php

php脚本运行时没有输出。

过了一段时间,php脚本响应:

Killed 

我的想法是它到达了memory_limit:ini_set('memory_limit', '40960M');

增加内存限制似乎可以解决问题,但它只会增加优势。

Killed短语究竟是什么意思?

5 个答案:

答案 0 :(得分:7)

你的进程被杀了。可能有很多原因,但很容易丢弃一些更明显的原因。

  • php限制:如果你遇到php限制,你会在日志文件中得到一个错误,也可能在命令行上。这通常不会打印'已杀'
  • 会话已结束问题:如果你仍然有你的会话,那么你的会话似乎没有结束,所以忽略所有的nohup和&东西

如果您的服务器缺乏资源(没有内存,没有交换),内核可能会终止您的进程。这可能正在发生的事情。

无论如何:你的过程正在发出一个应该停止的信号。通常只有几件“事情”可以做到这一点

  • 您的帐户(例如您终止了该流程)
  • 管理员用户(例如root)
  • 内核真的需要你自己的记忆。
  • 也许是一些自动化过程,例如,如果您居住在共享服务器上,并且占用的资源超过了您的资源份额。

参考:Who "Killed" my process and why?

答案 1 :(得分:2)

您可能在PHP脚本中内存不足。以下是重现该错误的方法:

我正在使用PHP 5.3.10在Ubuntu 12.10上执行此示例:

创建名为m.php的PHP脚本并保存:

<?php
    function repeat(){
       repeat();
    }
    repeat();
?>

运行它:

el@apollo:~/foo$ php m.php
Killed

程序占用100%CPU大约15秒然后停止。看看dmesg | grep php,有线索:

el@apollo:~/foo$ dmesg | grep php
[2387779.707894] Out of memory: Kill process 2114 (php) score 868 or 
sacrifice child

所以在我的情况下,PHP程序打印“Killed”并暂停,因为它由于无限循环而耗尽内存。

<强>解决方案:

  1. 增加可用的RAM量。
  2. 将问题集分解为按顺序运行的较小块。
  3. 重写程序,使其内存要求更小。

答案 2 :(得分:1)

Killed bash 表示当一个进程在SIGKILL之后退出时,它与putty无关。

Terminated bash 在SIGTERM之后进程退出时所说的内容。

您没有遇到PHP limits,可能遇到了另一个问题,请参阅:

Return code when OOM killer kills a process

答案 3 :(得分:-2)

如果你已经在处理与脚本内存和超时相关的php.ini设置,那么可能是它的linux ssh连接终止于活动会话或类似的东西。

你可以使用'nohup'linux命令运行一个免于挂起的命令

shell> nohup php -f 'scriptname'.php

修改: - 您可以添加'&amp;'来关闭会话在命令结束时: -

shell> nohup php -f 'scriptname'.php &> /dev/null &

'&安培;' linux中任何命令结束时的operater在后台移动该命令

答案 4 :(得分:-2)

http://en.wikipedia.org/wiki/Nohup

在命令之前尝试使用nohup。

nohup捕获挂断信号而&符号没有(除了shell以这种方式配置或根本不发送SIGHUP)。

通常,使用&amp;运行命令时然后,shell将使用挂断信号(kill -SIGHUP)终止子命令。这可以使用nohup来防止,因为它捕获信号并忽略它,以便它永远不会到达实际的应用程序。

如果你正在使用bash,你可以使用命令shopt | grep hupon,以确定您的shell是否将SIGHUP发送到其子进程。如果它关闭,进程将不会终止,因为您似乎就是这种情况。

有些情况下nohup不起作用,例如当您开始重新连接NOHUP信号的过程时。

nohup php -f 'yourscript'.php