0

我正在使用 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 版本或操作系统?为什么会这样?有没有办法改变它并允许我在后台运行脚本而不必添加 /dev/null 作为 STDIN ?

谢谢 !

4

1 回答 1

0

你的程序什么都不做,只是打印一些东西并终止return 0(确定你不是说exit()?)。代码执行后,php 解释器不再做任何事情,只是向 shell 发出信号“嘿,伙计!我完成了!你可以通知用户了!” 调用它&只是告诉shell:“在后台运行这个命令。” 它确实如此。正好一次。

为了让你的程序无限期地运行,实际上也必须无限期地运行。

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

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

于 2014-11-06T16:44:33.960 回答