0

この件に関しては、たとえばhereenterなどのエントリがいくつかありますが、どの提案も機能していないようです。ここに例があります:

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

sleep 10バックグラウンドで新しいコマンドを開始し、すぐにシェルに戻ることを期待しています。しかし、見つかった動作は、このコードがサブコマンドの実行を「待機」することsleep 10です。

コマンドをバックグラウンドで新しいプロセスとして実行するにはどうすればよいですか?

4

1 に答える 1

0

nohupウィキペディアのページのメモによると、一部のシェルは、すべてのストリームが再び解放されない限り、閉じることを拒否します。

したがって、回避策は、次の例のように、出力、エラー、および入力の 3 つの標準ストリームをすべてリダイレクトすることです。

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 に答える