ps 能否在 Linux 上仅显示非内核进程?

ps 能否在 Linux 上仅显示非内核进程?

如何要求ps仅显示用户进程而不显示内核线程?

这个问题明白我的意思...

答案1

应该这样做(在 Linux 下):

ps --ppid 2 -p 2 --deselect

kthreadd(PID 2) 的 PPID 0 (在 Linux 2.6+ 上) 但ps不允许过滤 PPID 0;因此这个解决方法。

另请参阅此等效答案

答案2

在实践中我发现以下习语就足够了:

ps auxf | grep -v ]$

它过滤以括号结尾的行,其中可能结果会省略不需要的条目,但可能性很小。相反,它很容易记住并且输入相对较快。

某些进程(如 avahi-daemon)会在括号中添加其进程名称信息(对于 avahi-daemon 为主机名),并将被此命令过滤掉。

答案3

识别内核进程的一种方法是它们不使用任何用户内存,因此 vsz 字段为 0。这也可以捕获僵尸进程(感谢斯蒂芬·查泽拉斯对于此观察),可以根据其状态将其消除。

ps axl | awk '$7 != 0 && $10 !~ "Z"'

仅列出 PID:

ps -e -o pid= -o state= -o vsize= | awk '$2 != "Z" && $3 != 0 {print $1}'

答案4

尽管这个问题已经有点老了,但有一个有趣的新方法:自从版本 4过程包中,可以设置环境变量LIBPROC_HIDE_KERNEL。如果设置,附注(1)顶部(1)仅显示用户空间进程。

手册摘录:

LIBPROC_HIDE_KERNEL

将其设置为任意值以隐藏通常使用 -e 选项显示的内核线程。这相当于选择 --ppid 2 -p 2 --deselect 。也可以在 BSD 模式下工作。

相关内容