在linux中,可以利用kill指令根據pid查看進程是否存在,「kill -0」不會向行程發送訊號,但是會進行錯誤檢查,若行程存在,回傳的結果是0,若進程不存在,回傳的結果是1,語法為「kill -0 pid」。
本教學操作環境:linux7.3系統、Dell G3電腦。
假設我們現在要監控某進程是否存活,每分鐘檢查一次,用上面的辦法就要每分鐘運行一次ps命令並且做一次grep正規查找。這點開銷在伺服器上似乎不算什麼,然而如果我們要在同一節點上同時監測數十個、數百個這樣的進程又如何呢?所以,我們有必要從性能的角度出發,發掘一些更好的方法。
對於daemon進程,通常都會有自己的pid或lock文件,我們可以檢查這些文件是否存在來判斷進程是否存在。然而有些異常情況下,pid檔案存在進程卻並不存在。因此並不能依賴進程的pid檔來偵測進程是否存活。
一種可靠的方法是使用"kill -0 pid",kill -0不會向進程發送任何訊號,但是會進行錯誤檢查。如果進程存在,命令返回0,如果不存在返回1。
但是,這種方法對於普通用戶來說只能用於檢查自己的進程,因為向其它用戶的進程發送信號會因為沒有權限而出錯,返回值也是1。
[sw@gentoo ~]$ kill 2993 -bash: kill: (2993) - Operation not permitted [sw@gentoo ~]$ echo $? 1 [sw@gentoo ~]$
當然,如果你用特權使用者執行kill指令的話,就沒有權限問題啦。
另一方面,我們知道核心會透過/proc虛擬檔案系統導出系統中正在運行的進程信息,每個進程都有一個/proc/
相關推薦:《Linux影片教學》
以上是linux怎麼用pid查看進程是否存在的詳細內容。更多資訊請關注PHP中文網其他相關文章!