Linux使用
使用kill -s 0pid'vs'[[-e/proc/p一世d'vs'[[−和/pr這C/pid
vs [[ -e /proc/pid ]]
來檢測 PID 是否正在執行
常用來檢查程序是否正在執行的習慣用法之一是使用
kill -s 0 $pid
.我的問題是,它比使用
[[ -e /proc/$pid ]]
構造有什麼好處嗎?我正在編寫的腳本是 Linux 和 bash 特定的。
我更喜歡
kill -s 0 pid
vs 測試/proc/pid
,因為前者是可移植的,由 POSIX 指定。即使您的腳本以 Linux 為目標,仍然存在(非常輕微的)/proc
由於某種原因被解除安裝的風險。
我通常會使用命令,例如
kill
直接從/proc
. 好處是,如果它成功與否,諸如此類的工具kill
將返回狀態程式碼(think ),並且理論上應該已經包含任何與 API 相關的東西,當它處理內容而不是自己滾動時。$?``/proc
此外,使用專用命令可以使您的程式碼在各種 Unix 上具有更好的可移植性。
/proc
在 Solaris 和 AIX 等其他 Unix 上並不普遍。例子
測試程序殺死。
$ sleep 10 & [1] 11639
現在我們殺了它。
$ kill 11639 [1]+ Terminated sleep 10
我們成功了嗎?
$ echo $? 0
零意味著我們成功了。其他任何事情,我們都可以用不同的方式處理它。直接閱讀
/proc
,我們有點進退兩難。同樣的情況,我們試圖殺死一個不存在的程序。
$ kill 61234 bash: kill: (61234) - No such process
我們得到有關它的回饋。
$ echo $? 1
還有什麼?
如果您寧願殺死或按名稱查找程序,您可能還想使用
pkill
and進行調查,而不是. 但這最終取決於您要做什麼。pgrep``$pid