ここで私は愚かかもしれませんが、プロセスの実行中に何かをしたい場合は、なぜこれを行う必要がありますか?
while kill -0 $PID
do
#...
done
変える
until kill -0 $PID
do
#...
done
?
kill -0
1
0
プロセスが見つからない場合は、プロセスが見つかった場合はコードで終了します。
$ 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
この場合は、キーワードが((
コマンドとして扱われ、結果がゼロであるため、ゼロ以外の値を返すので、特別です。