1

Google で探しているものが見つからなかったので、これは非常に重要です。

コマンド ラインによって実行されたアプリケーション (または、タスクと呼ぶ方が適切ですか?) がいつ終了したかを知るにはどうすればよいですか? 私がこのようにした場合、PHPは複数のファイルをコピーするタスクが完了したかどうかをどのように認識しますか:

 exec("cp -R /test/ /var/test/test");

コマンドがコピーを作成するためにバックグラウンドで実行されている間でも、PHP スクリプトは次のコードに進みますか? または、PHP スクリプトはコピーが完了するまで待機しますか? また、コマンド ライン アプリケーションは、スクリプトが完了したときに (完了した場合)、どのようにスクリプトに通知するのでしょうか? なんらかの相互作用が起こっているに違いありません。

4

2 に答える 2

1

phpのexecは文字列を返すので、そうです。コマンドが完了するまで、Webページはフリーズします。たとえば、この単純なコード

<?PHP
echo exec("sleep 5; echo HI;");
?>

実行すると、ページが5秒間読み込まれているときに表示され、次のように表示されます。

 HI;

私がこれを好む場合、PHPは複数のファイルをコピーするタスクが実行されたかどうかをどのように知るのですか?

PHPはそれを知りません。単にコマンドを実行するだけで、機能したかどうかは関係ありませんが、このコマンドから生成された文字列を返します。そのため、統計時にTRUE / FALSEを返すため、PHPのcopyコマンドを使用する方が適切です。または、0/FALSEまたは1/TRUEを返すbash/shスクリプトを作成して、このルートを使用している場合にコマンドが成功したかどうかを判断します。次に、PHPをそのまま使用できます。

<?PHP
$answer = exec("yourScript folder folder2");
if ($answer=="1") {
//Plan A Worked
} else {
//Plan A FAILED try PlanB
}
?>
于 2012-10-22T21:30:45.883 に答える
0

何が返されても、exec呼び出しが返されるまで待機します。

ただし、開始したコマンドがまだ終了していないのに、exit呼び出しが戻った可能性があります。これは、たとえばコマンドの最後に「&」を明示的に指定するなどして、コントロールから切り離す場合に当てはまる可能性があります。

于 2012-10-22T21:23:13.647 に答える