/ / PHPからバックグラウンドでUNIXプロセスを実行する[複製]-php、shell、unix

Unixプロセスをバックグラウンドでphpから実行する[duplicate] - php、shell、unix

このunixコマンドをシェルで直接実行すると:

$ sleep 100 &

スリープは予想どおりバックグラウンドで実行され、コマンドラインで作業を続けることができます。

しかし、shell_exec()とphpで同じことをしようとすると、異なる結果が得られます。

<?php

$sleep = $argv[1];
$shell="sleep " . $sleep . " &";
shell_exec($shell);

?>

実行時 php sleep.php 100 コマンドラインがハングし、スリープが終了するまでこれ以上コマンドを受け付けません。これが私が欠けているニュアンスであるかどうかはわかりません shell_exec() / $argv PHPのまたはUNIXシェルで。

ありがとう。

回答:

回答№1の場合は3

shell_exec 関数はコマンドの出力をキャプチャしようとしていますが、同時に処理を続けながら実行することはできません。実際、phpソースコードを見ると、 shell_exec 機能は popen C呼び出し、これは wait コマンドのsyscall。 wait 子が終了するまでサブプロセスが戻らないことを保証します。