Linux

使用kill -s 0pid'vs'[[-e/proc/p一世d'vs'[[−和/pr這C/pid vs [[ -e /proc/pid ]] 來檢測 PID 是否正在執行

  • November 26, 2013

常用來檢查程序是否正在執行的習慣用法之一是使用kill -s 0 $pid.

我的問題是,它比使用[[ -e /proc/$pid ]]構造有什麼好處嗎?

我正在編寫的腳本是 Linux 和 bash 特定的。

我更喜歡kill -s 0 pidvs 測試/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

還有什麼?

如果您寧願殺死或按名稱查找程序,您可能還想使用pkilland進行調查,而不是. 但這最終取決於您要做什麼。pgrep``$pid

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