Linux

為什麼是“雖然殺死-0磷一世D____not’untilkill-0磷一世D’一種ndn這噸’在n噸一世lķ一世ll−0PID’ and not ‘until kill -0PID”?

  • February 19, 2015

我可能在這裡很愚蠢,但是如果我想在程序執行時做某事,我為什麼要這樣做:

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

那麼哪個永遠不會執行?

處理返回碼時,“0”表示成功,非零表示失敗。while 循環的語法是:

while COMMANDS; do ...; done

while語句檢查提供的命令列表中最後一個命令的返回碼。在您的最後一個範例中while 0,這將嘗試執行一個名為“0”的命令並檢查它的返回碼。

文字 0 對於算術上下文之外的 bash 並不特殊。在該上下文中,0認為是錯誤的。例如

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

這種情況很特殊,因為關鍵字((被視為命令,它返回非零,因為它的結果是 0。

引用自:https://unix.stackexchange.com/questions/185793