待って、待たないで

待って、待たないで

myprogram埋め込みファイルがある場合

sleep 200
date

バックグラウンドで次のコマンドを実行します。

$ sh myprogram &

myprogramコマンドの使用がいつ完了するかを知りたいです。wait

$ cat >notify
wait PID
echo "Program completed"
$ sh notify &

PID3番目のコマンドによって提供されたプロセスID。私の質問は、「Program Complete」メッセージが最後のコマンドの直後に端末に印刷されることです。なぜ待機しないのですか? 、Ubuntu 11.10を使用しています

ベストアンサー1

親と子の関係は、関連するすべての「&」のために壊れます。

組み込み関数は、明らかに呼び出しプロセスの直接子PIDでのみ機能するこのwait(2)システム呼び出しに基づいています。waitwait(2)

を呼び出すと、対話型シェルの子として実行されますsh myprogram &sh

呼び出すと、対話型シェルの子になりますsh notify &sh

したがって、2番目の項目はsh最初の項目と直接の親関係がなく、機能しませんshwait

sh myprogram &; sh notify;このwaitコマンドは対話型シェルの子孫によって呼び出されるため、これらのいずれかを呼び出す場合は機能しません。

私にはうまくいきました:sh myprogram &; wait このwaitコマンドを使用すると、インタラクティブシェル(sh明示的に呼び出された親シェル)がsh終了するまで停止します。

おすすめ記事