我在带有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?
谢谢!
答案 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不会发出任何内容,所以它不会出现。