Bashスクリプトからtcpサーバーを起動すると、現在のインスタンスがリッスンを開始する直前に、以前のインスタンス(同じポートをリッスンしている可能性があります)を強制終了する必要があります。
pkill <previous_pid>
。私がそれを正しく理解していれば、これはSIGTERM
をターゲットpidに送信するだけです。 pkill
が戻るとき、ターゲットプロセスはまだ生きている可能性があります。終了するまでpkill
を待機させる方法はありますか?
いいえ。できることは、kill -0 $PID
でループを作成することです。この呼び出しが失敗した場合($? -ne 0
)、プロセスは終了しています。
while kill -0 $PID; do
sleep 1
done
(kudos to qbolec for the code)
関連:
wait
(bash組み込み)を使用して、プロセスが完了するまで待機します。
pkill <previous_pid>
wait <previous_pid>