シェルスクリプト内の各コマンドの pid を監視するにはどうすればいいですか?

シェルスクリプト内の各コマンドの pid を監視するにはどうすればいいですか?

私の状況では、バックグラウンドで rsync と tar を実行するシェル スクリプトが 1 つあります。rsync はファイルの転送に使用され、tar は rsync の終了後に圧縮を行います。私の問題は、rsync の pid を監視し、rsync の pid が存在しなくなったときに tar コマンドを開始するように指示する方法です。

シェル スクリプトは次のようになります。

rsync data.log B/ &
tar data.tar.gz B/data.log &

答え1

とても簡単です。pid 変数を次のように保存する必要があります。

PID_1=$!

進行状況がまだ実行中かどうかを確認するには、次のように kill -0 を実行します。

while True:
     if [ 'kill -0 $PID_1' -eq 0 ]; then
         echo Process still running
     else
         echo process done

(コードが正しく実行されない場合は、大変申し訳ございません。ベッドで書いていました :-))

説明: 'kill -0 $PID_1' は 0 または明らかに 1 を返します。 0 の場合、プロセスは実行中であり、1 の場合、プロセスは完了しています。 'echo $?' で戻りコードを確認できます。

これが役に立つことを願っています。

関連情報