プロセスが閉じるまで、BASHスクリプトの実行を停止したい(PIDを変数に格納している)。考えている
while [PID IS RUNNING]; do
sleep 500
done
私が見たほとんどの例では、ルートを必要とする/ dev/nullを使用しています。ルートを必要とせずにこれを行う方法はありますか?
事前にどうもありがとうございました!
kill -s 0 $pid
は、$pid
は実行中ですが、それ以外の場合は失敗します。実際にプロセスにシグナルを送信せずに、if
ステートメントで直接使用できます。
wait $pid
はそのプロセスを待機し、ループ全体を置き換えます。
あなたがしたいようです
wait $pid
$pid
が終了すると戻ります。
それ以外の場合は使用できます
ps -p $pid
プロセスがまだ生きているかどうかを確認します(pidを所有していなくても機能するため、これはkill -0 $pid
より効果的です)。
/proc/YOUR_PID
ディレクトリの存在を探す場合があります。
ps --pid $pid &>/dev/null
存在する場合は0、それ以外の場合は1を返します
私はいつも以下を使用しますtail -f /dev/null --pid $PID
。明示的なループを必要とせず、シェルの子pidのみに限定されません。