なぜ「untilkill-0$PID」の代わりに「whilekill-0$PID」を使用するのですか?

なぜ「untilkill-0$PID」の代わりに「whilekill-0$PID」を使用するのですか?

ここで私は愚かかもしれませんが、プロセスの実行中に何かをしたい場合は、なぜこれを行う必要がありますか?

while kill -0 $PID
do
    #...
done

変える

until kill -0 $PID
do
    #...
done

kill -010プロセスが見つからない場合は、プロセスが見つかった場合はコードで終了します。

$ kill -0 123444
-bash: kill: (123444) - No such process
$ echo $?
1
$ screen -ls | grep rofl
    28043.rofl  (02/19/2015 02:27:56 PM)    (Detached)
$ kill -0 28043
$ echo $?
0

したがって、プロセスが実行中の場合、whileループは次のように要約されます。

while 0
do
    #...
done

では、どちらが決して処刑されないのでしょうか?

ベストアンサー1

戻りコードを処理するとき、「0」は成功を示し、0以外の場合は失敗を示します。 whileループの構文は次のとおりです。

while COMMANDS; do ...; done

このwhileステートメントは、提供されたコマンドのリストで最後のコマンドの戻りコードを確認します。最後の例では、while 0「0」というコマンドを実行し、対応する戻りコードを確認しようとします。

リテラルゼロは、算術文脈の外でbashするために特別ではありません。この文脈では、0はい偽物とみなされます。例えば

while (( 0 )); do
  ... # never executes
end

この場合は、キーワードが((コマンドとして扱われ、結果がゼロであるため、ゼロ以外の値を返すので、特別です。

おすすめ記事