【问题标题】:Linux: How to find the list of daemon processes and zombie processesLinux:如何找到守护进程和僵尸进程的列表
【发布时间】:2013-08-02 04:49:52
【问题描述】:

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

如何获得僵尸进程和守护进程的综合列表? 我如何在不同的操作系统上做到这一点。 Linux?艾克斯?窗户?

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

【问题讨论】:

  • 没有办法识别守护进程,但是僵尸在ps的状态栏中有Z
  • 作为约定,守护进程在其名称的末尾有 d,即 systemd、httpd 等。

标签: linux unix linux-kernel admin aix


【解决方案1】:

试试这个。

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

【讨论】:

    【解决方案2】:

    在 Linux 上使用 GNU ps:

    [

    $ ps --version
    
    procps-ng version 3.3.3
    

    ]

    僵尸:

    ps -lA | grep '^. Z'
    

    会让你变成僵尸(注意参数是小写的“L”,即“l”后跟“A”)。

    守护进程:

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

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

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

    【讨论】:

      【解决方案3】:

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

      因此:

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

      【讨论】:

      • 但这也会输出那些不是守护进程的进程。因为,如果一个进程的父进程在一个子进程之前死亡,那么该子进程将由 init() 作为父进程。
      【解决方案4】:

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

      【讨论】:

      • 没错,但是:(a) 更多的努力 (b) 你仍然无法确定哪个是守护进程
      • 请您详细介绍一下“编写伪字符开发驱动程序”吗?此外,通过 task_struct 导航,是否可以精确识别守护进程。意思是,肯定的。没有不匹配。
      【解决方案5】:

      我为守护进程和“旧”sysv initd 编写了代码,您必须检查它是否在您的发行版上运行。

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

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

      它在目录中寻找他们的名字

      /var/lock/subsys
      

      所以你可以

      • 从那里获取名称列表

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

      扫描所有进程:列出每个子目录

      /proc
      

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

      比如pid为1234的进程的状态就是这个文件

      /proc/1234/status
      

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

      【讨论】:

        猜你喜欢
        • 2011-11-09
        • 2011-09-19
        • 2021-05-11
        • 1970-01-01
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        • 2010-11-12
        相关资源
        最近更新 更多