web-dev-qa-db-ja.com

BASH-PIDが存在するかどうかを確認する

プロセスが閉じるまで、BASHスクリプトの実行を停止したい(PIDを変数に格納している)。考えている

while [PID IS RUNNING]; do
sleep 500
done

私が見たほとんどの例では、ルートを必要とする/ dev/nullを使用しています。ルートを必要とせずにこれを行う方法はありますか?

事前にどうもありがとうございました!

22
JohnP

kill -s 0 $pidは、$pidは実行中ですが、それ以外の場合は失敗します。実際にプロセスにシグナルを送信せずに、ifステートメントで直接使用できます。

wait $pidはそのプロセスを待機し、ループ全体を置き換えます。

34
moonshadow

あなたがしたいようです

wait $pid

$pidが終了すると戻ります。

それ以外の場合は使用できます

ps -p $pid

プロセスがまだ生きているかどうかを確認します(pidを所有していなくても機能するため、これはkill -0 $pidより効果的です)。

22
sligocki

/proc/YOUR_PIDディレクトリの存在を探す場合があります。

7

ps --pid $pid &>/dev/null

存在する場合は0、それ以外の場合は1を返します

4
Matt Kneiser

私はいつも以下を使用しますtail -f /dev/null --pid $PID。明示的なループを必要とせず、シェルの子pidのみに限定されません。

3
qdiesel