linux怎么用pid查看進程是否存在

linux中,可以利用kill命令根據(jù)pid查看進程是否存在,“kill -0”不會向進程發(fā)送信號,但是會進行錯誤檢查,若進程存在,返回的結(jié)果是0,若進程不存在,返回的結(jié)果是1,語法為“kill -0 pid”。

linux怎么用pid查看進程是否存在

本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。

linux怎么用pid查看進程是否存在

假設(shè)我們現(xiàn)在要監(jiān)測某進程是否存活,每分鐘檢查一次,用上面的辦法就要每分鐘運行一次ps命令并且做一次grep正則查找。這點開銷在服務(wù)器上似乎不算什么,然而如果我們要在同一節(jié)點上同時監(jiān)測數(shù)十個、數(shù)百個這樣的進程又如何呢?所以,我們有必要從性能的角度出發(fā),發(fā)掘一些更好的辦法。

對于daemon進程,通常都會有自己的pid或者lock文件,我們可以檢查這些文件是否存在來判斷進程是否存在。然而有些異常情況下,pid文件存在進程卻并不存在。因此并不能依賴進程的pid文件來檢測進程是否存活。

一種可靠的方法是使用”kill -0 pid”,kill -0不會向進程發(fā)送任何信號,但是會進行錯誤檢查。如果進程存在,命令返回0,如果不存在返回1。

linux怎么用pid查看進程是否存在

但是,這種方法對于普通用戶來說只能用于檢查自己的進程,因為向其它用戶的進程發(fā)送信號會因為沒有權(quán)限而出錯,返回值也是1。

[sw@gentoo?~]$?kill?2993 -bash:?kill:?(2993)?-?Operation?not?permitted [sw@gentoo?~]$?echo?$? 1 [sw@gentoo?~]$

當然,如果你用特權(quán)用戶執(zhí)行kill命令的話,就沒有權(quán)限問題啦。

另一方面,我們知道內(nèi)核會通過/proc虛擬文件系統(tǒng)導(dǎo)出系統(tǒng)中正在運行的進程信息,每個進程都有一個/proc/目錄。因此我們可以將檢測進程是否存在轉(zhuǎn)換為檢測/proc/目錄是否存在,這樣就簡單多了。

相關(guān)推薦:《Linux視頻教程

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊8 分享