2013-08-01 120 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相同。