如何要求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 模式下工作。