Linux:如何查找守护程序进程和僵尸进程列表

时间:2013-08-01 10:10:20

标签: linux unix linux-kernel admin aix

我尝试检查Google,但我找不到与实际问题相关的太多信息。

如何获得僵尸进程和守护程序进程的整合列表? 我如何在不同的操作系统上执行此操作。 Linux呢? AIX?视窗?

我确信,基于PID,我们无法识别过程的类型。通过终端运行可能也无济于事。

5 个答案:

答案 0 :(得分:16)

试试这个。

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相同。

答案 1 :(得分:10)

在Linux上使用GNU ps:

[

$ ps --version

procps-ng version 3.3.3

僵尸:

ps -lA | grep '^. Z'

会给你所有的僵尸(请注意,param是小写的'L',即'l'后跟'A')。

守护程序:

正如@Barmar所说,没有办法确定守护进程,但是一个进程是守护进程的线索是它与任何TTY设备无关。 'ps -Al'输出的第12列是TTY;第四个是PID,第四个是进程名称。因此:

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

将为您提供可能守护进程的进程;不保证! :)

答案 2 :(得分:2)

守护进程由init进程启动,这意味着它们的PPID为1。

因此:

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

答案 3 :(得分:1)

要获取Zombie和守护进程列表,只需编写一个伪字符开发驱动程序,您应在其中浏览task_struct并查找状态

答案 4 :(得分:0)

我是为守护程序和“旧的” sysv initd编写的,您必须检查它是否可以在您的发行版上正常工作。

好的恶魔在/ etc / initd中有写好的启动脚本

更改运行级别时,init如何知道正在运行的守护程序?

它将在目录中查找其名称

  

/ var / lock / subsys

所以你可以

  

从那里获取名称列表

     

扫描所有正在运行的进程,并检查名称是否在列表中:bingo!

要扫描所有进程,请列出以下所有子目录:

  

/ proc

如果它的名字是数字,则它是正在运行的进程的pid。

例如,pid为1234的进程的状态是此文件

  

/ proc / 1234 /状态

打开它并获得第一行,以“名称:”开头

请参见

  

http://man7.org/linux/man-pages/man5/proc.5.html

     

https://linuxexplore.com/2014/03/19/use-of-subsystem-lock-files-in-init-script/

(抱歉,格式令人讨厌,我正在用手机写信...)