2013-08-01 171 views
14

我試圖檢查谷歌,但我找不到有關實際問題的很多信息。Linux:如何找到守護進程和殭屍進程列表

如何獲取殭屍進程和守護進程的綜合列表? 如何在不同的操作系統上執行此操作。 Linux呢? AIX?視窗?

我確定,基於PID,我們不能識別過程的類型。通過終端運行可能也無濟於事。

+0

沒有辦法識別守護進程,但殭屍在'ps'的狀態欄有'Z'。 – Barmar

回答

1

要獲得殭屍和守護進程的列表中只寫了psudo字符開發的驅動程序,你應該定位槽task_struct中,尋找狀態

+0

確實如此,但是:(a)更多的努力(b)您仍然不知道哪個守護進程肯定是 – kaiwan

+0

請您在「寫一個僞字符開發驅動程序」上大聲疾呼?另外,通過在task_struct中導航,是否可以精確識別守護進程。意思,當然。沒有不匹配。 – kris123456

10

Linux上,GNU PS:

[

$ ps --version 

procps-ng version 3.3.3 

]

殭屍:

ps -lA | grep '^. Z' 

會讓你所有的殭屍(注意參數是小寫'L',即'l'後面跟着'A')。

守護程序:

由於@Barmar說,有沒有辦法讓守護進程肯定的,但一個線索的過程是一個守護進程是它不與任何TTY設備相關。 'ps -Al'輸出的第12列是TTY;第四個是PID,第十四個是進程名稱。因此:

ps -lA | awk '$12 == "?" {print $4, $14}' 

會得到你,是可能守護進程;不保證! :)

2

守護程序是由init進程啓動,這意味着他們有1

因此一個PPID:

ps -ef | awk '$3 == 1' 
+0

但是這會輸出那些不是守護進程的進程。因爲,如果父進程在子進程之前死亡,那麼該子進程將由init()進行父進程。 –

14

試試這個。

ps axo pid,ppid,pgrp,tty,tpgid,sess,comm |awk '$2==1' |awk '$1==$3' 

在上述命令中,我使用了守護進程的屬性來從Linux中所有現有進程中篩選出來。

守護進程的父節點始終爲Init,因此請檢查ppid 1. 守護進程通常不與任何終端關聯,因此我們在tty下有'?'。 守護進程的process-id和process-group-id通常是相同的 守護進程的session-id與進程id相同。