バックグラウンドプロセスの終了ステータスを取得する方法は?

バックグラウンドプロセスの終了ステータスを取得する方法は?

2つ走っています。mysqlspbashスクリプトから。同時に起動し(リモートサーバーで実行している)、バックグラウンドにして完了したら、次のステップに進みたいと思います。exit statusエラーが発生した場合に備えて、両方をインポートしたいと思います。これを念頭に置いて、以下のコマンドを試してみましたが、うまくいきませんsleepでした。

編集するジェフ・シャーラーによると回答:私が試したことは次のとおりです。

givinv@87-109:~$ sleep5 & PID5=$!; exit5=$?; sleep 4 & PID4=$!; exit4=$?; wait $PID5 $PID4; echo $exit5 $exit4
[1] 29530
[2] 29531
No command 'sleep5' found, did you mean:
 Command 'sleep' from package 'coreutils' (main)
sleep5: command not found
[1]-  Exit 127                sleep5
[2]+  Done                    sleep 4
0 0
givinv@87-109:~$ unset exit5 exit4
givinv@87-109:~$ sleep5 & exit5=$?;PID5=$!; sleep 4 & exit4=$?;PID4=$!; wait $PID5 $PID4; echo $exit5 $exit4
[1] 29535
[2] 29536
No command 'sleep5' found, did you mean:
 Command 'sleep' from package 'coreutils' (main)
sleep5: command not found
[1]-  Exit 127                sleep5
[2]+  Done                    sleep 4
0 0
givinv@87-109:~$ 

sleep5が意図的に配置されました(無効なコマンド)。0しかし、まだexit status。上記のコマンドを実行すると、次の行が表示されます[1]- Exit 127 sleep5。スクリプトで実行したときにそれをキャプチャできますか?

exit status2つのコマンドを実行する方法同時に

答え1

~からバッシュのマニュアルページ、強調のためにイタリック体:

待つ

wait[-n] [作業仕様または pid...]

プロセスID pidまたはjobspec jobspecで指定された各サブプロセスが終了するのを待ちます。そして待った最後のコマンドの終了状態を返します。

背景記号を誤って配置したようです&

sleep5;exit5=$? &PID5=$!;$PID5 を待ちます;echo $?;echo $exit5

5秒間待機状態にし、ジョブのジョブexit5IDを設定してPID5から、ジョブが正常に完了するまで待ちますecho。最後の項目には空echo行が表示されます。これは、バックグラウンドプロセス(サブシェル)が終了し、exit5変数が割り当てられていない(空の)状態であるためです。

おそらくこれがあなたが望むものですか?

sleep5&PID5=$!;$PID5 を待ちます;exit5=$?;echo $exit5

バックグラウンドに切り替えてsleep 5PIDをに保存しますPID5。プロセスが終了するのを待ってから戻りコードをにキャプチャし、保存されたexit5戻りコードをエコーし​​ます。

関連情報