0

关于这个主题有几个条目,例如hereenter,但这些建议似乎都不起作用。我这里有一个例子:

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

我希望sleep 10在后台启动一个新命令,并立即返回到 shell。但发现的行为是此代码“等待”执行 subcommand sleep 10

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

4

1 回答 1

0

根据nohup维基百科页面上的一些注释,除非所有流再次免费,否则某些 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;

您可能想尝试一下。我希望这对您有所帮助,即使它不能回答您的问题。

于 2012-12-13T13:03:30.243 回答