2012-12-13 58 views
0

关于此主题有几个条目,例如hereenter,但没有任何建议似乎工作。我这里有一个例子:在Linux下运行php5后台进程

$pid = shell_exec("nohup sleep 10 2> /dev/null & echo $!"); 
echo $pid; 

,我期望在后台启动一个新的命令sleep 10,并立即返回到shell。但是发现的行为是这个代码'等待'执行子命令sleep 10

如何在后台运行我的commad作为新的进程?

回答

0

根据nohup on the wikipedia page的一些说明,有些shell会拒绝关闭,除非所有的流都是空闲的。因此

一种解决方法是重新所有三个标准流:输出,错误和输入,就像下面的例子:

nohup ./myprogram > foo.out 2> foo.err < /dev/null & 

这仅仅是一种猜测,但很可能会在你的情况的情况下。

$pid = shell_exec("nohup sleep 10 > /dev/null 2> /dev/null < /dev/null & echo $!"); 
echo $pid; 

您可能想试试这个。我希望这是有用的,即使它不能回答你的问题。

+0

@Alex:好的,您删除了您的评论:'$!'可能会从'nohup'返回PID,因为这是后台的命令。它现在为你解决了吗? – hakre