« 日本で夏時間を導入すること | トップページ | yash 2 その 20-2 »

2008年5月28日 (水)

シェルでバックグラウンドで起動したプロセスの戻り値を取得するには

検索すればすぐ見つかるんじゃないのかと思ったが意外にも出てこない。あまり知られていない機能なので仕方がないかも。

で、どうやればよいかというと、こうする。

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] 複数のバックグランドジョブの戻り値に書いてあるのは不正解。

|

« 日本で夏時間を導入すること | トップページ | yash 2 その 20-2 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: シェルでバックグラウンドで起動したプロセスの戻り値を取得するには:

» シェルの非同期コマンドとプロセス ID に関する問題 [まじかんと雑記]
複数の非同期コマンドのプロセス ID が重複した場合に発生する問題について [続きを読む]

受信: 2009年5月29日 (金) 13時43分

« 日本で夏時間を導入すること | トップページ | yash 2 その 20-2 »