回答:
キーは「待機」コマンドです。
#!/bin/bash
/my/process &
/another/process &
wait
echo "All processes done!"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
ではwait、あなたが必要な粒度を持つことができます。
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
これを行う1つの方法を次に示します。
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
waitそれにより適していますか?
nohupを使用してプロセスを実行し、シェルスクリプトを記述してnohupがログに記録するnohup.outファイルを読み取ることができます。
nohup command &
nohupため、何も書かないでくださいnohup.out。それは単に作成したファイルを、それまでのコマンドの出力をリダイレクトします。(2)コマンドが出力を生成しない場合、何も書き込まれずnohup.out、このアイデアはどこにも速く行きません。(3)command出力を書き込んだとしても、その出力を監視することで、いつ終了するかを知ることができますか?
lsofかどうかを確認しますが、これは非常に毛深い方法であることに同意します。nohupnohup.out
command実行が開始されるまでに、nohupなくなっています。(1)はい、2年前に言ったことを繰り返しているので、数字を繰り返しnohupていnohup.outます。(5)はい、シェルスクリプトを記述してループして実行lsofし、nohup.outまだ開いているかどうかを確認できます。しかし、それは別の答えになります。(6)あなたがそれをしたとしても、それは信頼できないでしょう。他のプロセスがnohup.outファイルを開いた場合はどうなりますか?この特定のプロセスがnohup.out開いているかどうかを確認する必要があります。(7)しかし、あなたがそうするつもりなら、なぜプロセスが実行されているかどうかだけをチェックしないのですか?