此主题有几个条目,例如here和enter,但这些建议似乎都没有效果。我在这里有一个例子:
$pid = shell_exec("nohup sleep 10 2> /dev/null & echo $!");
echo $pid;
我希望在后台启动一个新命令sleep 10
,然后立即返回shell。但是找到的行为是这段代码'等待'执行子命令sleep 10
。
如何在后台运行我的commad作为新流程?
答案 0 :(得分:0)
根据nohup
on the wikipedia page的一些注释,除非所有流再次免费,否则有些炮弹会拒绝关闭。
因此,解决方法是重定向所有三个标准流:输出,错误和输入,如下例所示:
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;
您可能想尝试一下。我希望这有用,即使它没有回答你的问题。