シェルでバックグラウンドで起動したプロセスの戻り値を取得するには
- Bashでバックグラウンドで起動したアプリの戻り値の取得 - Linux Square
検索すればすぐ見つかるんじゃないのかと思ったが意外にも出てこない。あまり知られていない機能なので仕方がないかも。
で、どうやればよいかというと、こうする。
foo 1 &
foo1pid=$!
foo 2 &
foo2pid=$!
foo 3 &
foo3pid=$!
wait $foo1pid
echo $?
wait $foo2pid
echo $?
wait $foo3pid
echo $?
変数 $! には最後に起動した非同期リスト (バックグラウンドプロセス) のプロセス ID が入っている。これは別の非同期リストを起動すると上書きされてしまうので、非同期リストを一つ起動するたびに個別の変数に保存しておく。
非同期リストの終了ステータス (戻り値) を得るには、保存しておいたプロセス ID を引数にして wait コマンドを使う。wait コマンドは指定したプロセスが終了するのを待った後、そのプロセスの終了ステータスを返すので、直後に変数 $? を見れば非同期リストの終了ステータスがわかる。
因みに[fol] Re: [Q] 複数のバックグランドジョブの戻り値に書いてあるのは不正解。
| 固定リンク
コメント