当我在 CentOS 6 上执行诸如 ps -aux 之类的命令时,我会得到一堆进程,其命令列在 [] 中,如下所示。名字中的[]是什么意思?我假设这些是某种特殊的进程,是什么让进程名称周围出现 [] ?
[root@centos6 src]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 18:48 ? 00:00:01 /sbin/init
root 2 0 0 18:48 ? 00:00:00 [kthreadd]
root 3 2 0 18:48 ? 00:00:00 [migration/0]
root 4 2 0 18:48 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 18:48 ? 00:00:00 [migration/0]
root 6 2 0 18:48 ? 00:00:00 [watchdog/0]
root 7 2 0 18:48 ? 00:00:02 [events/0]
答案1
如果命令行无法访问ps
,则/proc/<pid>/cmdline
返回一个空字符串,然后ps
将其括在方括号中。
您可以使用它来测试上述内容,方法是运行以下命令,然后在进程列表中检查它:
$ perl -e '$0 = ""; sleep'
然后做一个ps
:
saml 26756 2098 0 21:21 pts/9 00:00:00 []
果然我们的perl
流程显示在方括号 ( []
) 中。
cmdline 是空的,真的吗?
是的,看起来有点奇怪,但只是为了确认我检查了第一对,它们肯定是空的:
$ for i in `seq 2125`;do [ -e /proc/$i/cmdline ] || continue; \
echo -n "PID# $i: "; echo $(cat /proc/$i/cmdline);done | less
PID# 1: /sbin/init
PID# 2:
PID# 3:
PID# 4:
PID# 5:
PID# 15:
...
PID# 1187: /sbin/rsyslogd-c4
PID# 1189: /sbin/rsyslogd-c4
PID# 1190: /sbin/rsyslogd-c4
PID# 1211:
PID# 1229: irqbalance
PID# 1255: rpcbind
PID# 1269: mdadm--monitor--scan-f--pid-file=/var/run/mdadm/mdadm.pid
...
摆脱他们吗?
如果您使用-f
和-c
开关,您可以看到这些进程的扩展版本,不带方括号:
$ ps --version
procps version 3.2.8
$ ps -auxfc | less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S Aug21 0:00 kthreadd
root 3 0.0 0.0 0 0 ? S Aug21 0:04 \_ ksoftirqd/0
root 4 0.0 0.0 0 0 ? S Aug21 0:03 \_ migration/0
root 5 0.0 0.0 0 0 ? S Aug21 0:00 \_ watchdog/0
root 15 0.0 0.0 0 0 ? S Aug21 0:04 \_ events/0
root 19 0.0 0.0 0 0 ? S Aug21 0:00 \_ cpuset
root 20 0.0 0.0 0 0 ? S Aug21 0:00 \_ khelper
root 21 0.0 0.0 0 0 ? S Aug21 0:00 \_ netns
root 22 0.0 0.0 0 0 ? S Aug21 0:00 \_ async/mgr
root 23 0.0 0.0 0 0 ? S Aug21 0:00 \_ pm
root 24 0.0 0.0 0 0 ? S Aug21 0:00 \_ sync_supers
root 25 0.0 0.0 0 0 ? S Aug21 0:00 \_ bdi-default
root 26 0.0 0.0 0 0 ? S Aug21 0:00 \_ kintegrityd/0
root 30 0.0 0.0 0 0 ? S Aug21 0:07 \_ kblockd/0
root 34 0.0 0.0 0 0 ? S Aug21 0:00 \_ kacpid
root 35 0.0 0.0 0 0 ? S Aug21 0:00 \_ kacpi_notify
root 36 0.0 0.0 0 0 ? S Aug21 0:00 \_ kacpi_hotplug
root 37 0.0 0.0 0 0 ? S Aug21 0:00 \_ ata_aux
root 38 0.0 0.0 0 0 ? S Aug21 0:00 \_ ata_sff/0
root 42 0.0 0.0 0 0 ? S Aug21 0:00 \_ khubd
root 43 0.0 0.0 0 0 ? S Aug21 0:00 \_ kseriod
root 44 0.0 0.0 0 0 ? S Aug21 0:35 \_ kswapd0
root 45 0.0 0.0 0 0 ? SN Aug21 0:00 \_ ksmd
root 46 0.0 0.0 0 0 ? S Aug21 0:00 \_ aio/0
root 50 0.0 0.0 0 0 ? S Aug21 0:00 \_ crypto/0
root 59 0.0 0.0 0 0 ? S Aug21 0:00 \_ scsi_eh_0
root 60 0.0 0.0 0 0 ? S Aug21 0:26 \_ scsi_eh_1
root 61 0.0 0.0 0 0 ? S Aug21 0:00 \_ scsi_eh_2
root 62 0.0 0.0 0 0 ? S Aug21 0:00 \_ scsi_eh_3
root 63 0.0 0.0 0 0 ? S Aug21 0:00 \_ scsi_eh_4
root 64 0.0 0.0 0 0 ? S Aug21 0:00 \_ scsi_eh_5
root 71 0.0 0.0 0 0 ? S Aug21 0:00 \_ kpsmoused
root 72 0.0 0.0 0 0 ? S Aug21 0:00 \_ kstriped
从手册页ps
:
-c Show different scheduler information for the -l option.
-f does full-format listing. This option can be combined with many
other UNIX-style options to add additional columns. It also
causes the command arguments to be printed. When used with -L,
the NLWP (number of threads) and LWP (thread ID) columns will be
added. See the c option, the format keyword args, and the format
keyword comm.