我尝试在 Google 上查看,但找不到与实际问题相关的太多信息。
如何获得僵尸进程和守护进程的综合列表?我如何在不同的操作系统上做到这一点。Linux?艾克斯?视窗?
我确信,基于 PID,我们无法识别进程的类型。通过终端运行也可能无济于事。
我尝试在 Google 上查看,但找不到与实际问题相关的太多信息。
如何获得僵尸进程和守护进程的综合列表?我如何在不同的操作系统上做到这一点。Linux?艾克斯?视窗?
我确信,基于 PID,我们无法识别进程的类型。通过终端运行也可能无济于事。
试试这个。
ps axo pid,ppid,pgrp,tty,tpgid,sess,comm |awk '$2==1' |awk '$1==$3'
在上面的命令中,我使用守护进程的特性从 Linux 中的所有现有进程中过滤掉它们。
守护进程的父进程始终是 Init,因此请检查 ppid 1。守护进程通常不与任何终端关联,因此我们有“?” 在 tty 下。守护进程的进程 ID 和进程组 ID 通常相同 守护进程的会话 ID 与其进程 ID 相同。
在 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}'
将为您提供可能是守护进程的进程;不保证!:)
守护进程由 init 进程启动,这意味着它们的 PPID 为 1。
所以:
ps -ef | awk '$3 == 1'
要获取 Zombie 和守护进程的列表,只需编写一个伪字符开发驱动程序,您应该在其中导航 task_struct 并查找状态
我为守护进程和“旧” sysv initd 编写,您必须检查它是否在您的发行版上运行。
好恶魔在 /etc/initd 中有写得很好的启动脚本
更改运行级别时,init 如何知道正在运行的守护进程?
它在目录中查找他们的名字
/var/lock/subsys
这样你就可以
从那里获取名称列表
扫描所有正在运行的进程并检查名称是否在列表中:宾果!
扫描所有进程:列出每个子目录
/proc
如果它的名字是数字,它是一个正在运行的进程的 pid。
比如pid为1234的进程的状态就是这个文件
/proc/1234/status
打开它并得到第一行,以“名称:”开头
看