web-dev-qa-db-ja.com

プロセスを強制終了し、プロセスが終了するのを待ちます

Bashスクリプトからtcpサーバーを起動すると、現在のインスタンスがリッスンを開始する直前に、以前のインスタンス(同じポートをリッスンしている可能性があります)を強制終了する必要があります。

pkill <previous_pid>。私がそれを正しく理解していれば、これはSIGTERMをターゲットpidに送信するだけです。 pkillが戻るとき、ターゲットプロセスはまだ生きている可能性があります。終了するまでpkillを待機させる方法はありますか?

26
woodings

いいえ。できることは、kill -0 $PIDでループを作成することです。この呼び出しが失敗した場合($? -ne 0)、プロセスは終了しています。

while kill -0 $PID; do 
    sleep 1
done

(kudos to qbolec for the code)

関連:

23
Aaron Digulla

wait(bash組み込み)を使用して、プロセスが完了するまで待機します。

 pkill <previous_pid>
 wait <previous_pid>
2
Roland Jansen