ps(1)
,使用该-f
选项,将输出方括号中没有相关命令行的进程,如下所示:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug28 ? 00:07:42 /sbin/init
root 2 0 0 Aug28 ? 00:00:01 [kthreadd]
root 3 2 0 Aug28 ? 00:00:00 [rcu_gp]
root 4 2 0 Aug28 ? 00:00:00 [rcu_par_gp]
root 6 2 0 Aug28 ? 00:00:00 [kworker/0:0H-kblockd]
root 8 2 0 Aug28 ? 00:00:00 [mm_percpu_wq]
root 9 2 0 Aug28 ? 00:02:14 [ksoftirqd/0]
root 10 2 0 Aug28 ? 00:05:33 [rcu_preempt]
root 11 2 0 Aug28 ? 00:01:36 [rcuc/0]
root 12 2 0 Aug28 ? 00:00:00 [rcub/0]
root 13 2 0 Aug28 ? 00:00:07 [migration/0]
root 14 2 0 Aug28 ? 00:00:00 [idle_inject/0]
root 16 2 0 Aug28 ? 00:00:00 [cpuhp/0]
root 17 2 0 Aug28 ? 00:00:00 [cpuhp/1]
root 18 2 0 Aug28 ? 00:00:00 [idle_inject/1]
root 19 2 0 Aug28 ? 00:00:05 [migration/1]
root 20 2 0 Aug28 ? 00:00:55 [rcuc/1]
这些进程是否像其他进程一样被调度?
在 Linux 下,为每个进程在以 pid 命名的目录中处理
ps
内核top
提供的信息。/proc
这包括两个文件,comm
和cmdline
;comm
是进程的命令名称,并且cmdline
是进程的命令行,即提供给它的参数(包括它自己的“名称”)。ps
并top
使用方括号来区分两者:如果进程有命令行,则args
字段(也称为CMD
)输出;否则它会输出命令名称,并用方括号括起来。这在手册页中有描述
ps
,用于args
:没有进程参数的进程包括没有任何命令行(甚至不是
argv[0]
)构造的进程,例如内核线程,以及丢失了命令行的进程,即失效进程,也称为僵尸进程(可通过<defunct>
后缀识别)。这些都不会改变调度属性:所有进程都以相同的方式调度,根据它们的状态、优先级等。