1

例えば、system("sh /mydir/some-script.sh &")

4

2 に答える 2

2

はい、シェルはスクリプトをフォークしてすぐに戻りますが、スクリプトがどのように終了したかを知る簡単な方法はありません。

このような非同期コマンドを実行する「適切な」方法は、プロセスに対して、バイナリを設定し、引数の1つをスクリプトの名前に設定して子をfork(2)呼び出し、システムを使用して親から定期的に子をポーリングすることですオプションで呼び出します。-1 が返された場合、スクリプトが終了したことがわかり、そのリターン コードを取得できます。execve(2)/bin/shwaitpid(2)WNOHANGwaitpid

実際、プロセスが終了するまでsystem(3)呼び出しがwaitpidブロックされるという唯一の例外を除いて、ほとんど同じです。

于 2011-04-14T17:14:47.330 に答える
2
system("sh /mydir/some-script.sh &")

実行します

/bin/sh -c 'sh /mydir/some-script.sh &'

system外側のシェルが戻るとすぐに戻ります。これは、内側のシェルを起動した直後です。どちらのシェルもsome-script.sh終了を待ちません。

$ cat some-script.sh
sleep 1
echo foo

$ /bin/sh -c 'sh some-script.sh &' ; echo bar ; sleep 2
bar
foo
于 2011-04-14T17:15:55.627 に答える