为什么我的进程在后台运行时会停止?

时间:2014-11-06 16:30:33

标签: php bash stdin centos6.5

我在带有php5.3.3的CentOS 6.5上运行一个简单的PHP脚本

#!/usr/bin/env php
<?php
    echo "hello"."\n";
    return 0;
?>

我的问题是,如果我执行./testscript,它运行正常,如果我执行nohup ./testscript &,它运行正常,如果我./testscript < /dev/null > /dev/null &它运行良好(没有输出重定向)。 但是,如果我执行./testscript &,脚本将停止(并且没有输出):

[1]+  Stopped                 ./testscript 

据我所知,这是因为php期待来自STDIN的一些输入。但问题是为什么?正如您所看到的,在这个简单的脚本中没有任何需要输入的东西,我在Debian上的php5.4上没有这种行为。这种行为改变是来自php版本还是OS? 为什么会这样?有没有办法改变它并允许我在后台运行脚本而不必将/ dev / null添加为STDIN?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的程序除了打印内容并使用return 0终止之外什么都不做(确定您不是指exit()?)。代码执行后,php解释器无需再做任何事情,只需向shell发出信号&#34; Hey Buddy!我做完!您可以通知用户!&#34;使用&调用它只是告诉shell:&#34;在后台运行此命令。&#34;它做的。完全一次。

为了让您的程序无限期运行, 实际上无限期地运行。

<?php
  while(true) {
    // Doing something useful
    sleep(5);
  }
?>

使用nohup,&#34;程序&#34; (在这种情况下,php解释器)基本上被禁止终止 - 但它不会再多了。至于重定向 - 它们实际上将针对php解释器,它将等待进一步的输入,因为/ dev / null不会发出任何内容,所以它不会出现。