完成后,PHP CLI进程不会终止

时间:2011-07-24 20:39:23

标签: php process command-line-interface

我在一个PHP文件中有这个:

echo shell_exec('nohup /usr/bin/php -f '.CRON_DIRECTORY.'testjob.php > /dev/null 2>&1 &');

在testjob.php中我有:

file_put_contents('test.txt',time()); exit;

这一切都只是花花公子。但是,如果我进入流程,它就不会在运行后终止testjob.php。

3 个答案:

答案 0 :(得分:1)

(由于stackoverflow 仍然不得不发布评论而不得发布此答案而不是评论...)

适合我。我完全按照描述制作了testjob.php,另一个文件test.php只有给定的行(除了我删除了CRON_DIRECTORY,因为testjob.php和我在同一个目录中)。

为了确保我测量正确,我在testjob.php的顶部添加了“sleep(5)”,在另一个窗口中我有:

watch 'ps a |grep php'

运行。发生这种情况:

  1. 我运行test.php
  2. test.php立即退出,但testjob.php出现在我的列表中
  3. 5秒后消失。
  4. 我想知道shell是否重要,所以我从bash切换到了sh。结果相同。

    我也想知道是否可能因为你的外部脚本长时间运行。所以我把“sleep(10)”放在test.php的底部。相同的结果(即testjob.php在5秒后结束,test.php在5秒后结束)。

    所以,无益,你的问题不是你发布的代码。

答案 1 :(得分:0)

您正在执行PHP并将该执行作为后台任务。这意味着它将在后台中运行,直到完成。 shell_exec不会杀死这个过程或类似的东西。

您可能希望设置执行限制PHP cli has a setting of unlimited by default。另见set_time_limit PHP Manual;

因此,如果你想知道为什么php进程没有终止,你需要调试脚本。如果这太复杂并且您无法找到脚本运行那么长的原因,您可能只想在一段时间后终止该过程,例如1分钟。

答案 2 :(得分:0)

从命令末尾删除&。此符号表示nohup继续在后台运行,因此shell_exec正在等待任务完成......并等待......等待......直到时间结束;)

我甚至不知道为什么要用nohup执行此命令。

echo shell_exec('/usr/bin/php -f '.CRON_DIRECTORY.'testjob.php > /dev/null 2>&1');

应该足够了。

相关问题