首頁 > 運維 > linux運維 > 主體

linux檢測進程是否存在

(*-*)浩
發布: 2019-11-04 10:17:33
原創
3145 人瀏覽過

linux檢測進程是否存在

Linux下偵測程式是否存在           (建議學習:linux運算子

這個問題看起來好像很簡單,"ps -ef | grep xx"一下就行啦!這樣做當然可以,但是如果我們考究起效能來,這恐怕不是個好辦法。

假設我們現在要監控某進程是否存活,每分鐘檢查一次,用上面的辦法就要每分鐘運行一次ps命令並且做一次grep正則查找。 這點開銷在伺服器上似乎不算什麼,然而如果我們要在同一節點上同時監測數十個、數百個這樣的進程又如何呢?

所以,我們有必要從效能的角度出發,發掘一些更好的方法。

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

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

[sw@gentoo ~]$ ps
  PID TTY          TIME CMD
pts/0    00:00:00 bash
pts/0    00:00:00 ps
[sw@gentoo ~]$ kill -0 15091
[sw@gentoo ~]$ echo $?
[sw@gentoo ~]$ kill -0 15092
-bash: kill: (15092) - No such process
[sw@gentoo ~]$ echo $?
[sw@gentoo ~]$
登入後複製

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

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

當然,如果你用特權使用者執行kill指令的話,就沒有權限問題啦。

以上是linux檢測進程是否存在的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!