10

PID が存在しなくなるまで Bash を使用して待機しています。私はもう試した

#!/bin/bash
while [ kill -0 PID > /dev/null 2>&1 ]; do
    //code to kill process
done
//code to execute after process is dead

としても

#!/bin/bash
until [ ! kill -0 PID > /dev/null 2>&1 ]; do
    //code to kill process
done
//code to execute after process is dead

これらの例はどちらも機能しないか、プロセスが終了した後もループし続けます。私は間違って何をしていますか?

4

2 に答える 2

18

あなたは単にやるべきです:

while kill -0 $PID >/dev/null 2>&1
do
    # Code to kill process
done

ループ条件は、最後のコマンド (この場合はkill. オプション(-0質問で使用)は、実際にはプロセスにシグナルを送信しませんが、シグナルを送信できるかどうかを確認し、プロセスが存在しなくなった場合は送信できません。(kill()関数の POSIX 仕様と POSIXkillユーティリティを参照してください。)

「最後」の意味は、次のように書けることです。

while sleep 1
      echo Testing again
      kill -0 $PID >/dev/null 2>&1
do
    # Code to kill process
done

killこれも(およびkill単独で)の終了ステータスをテストします。

于 2012-07-11T05:13:29.057 に答える