Linux ps命令支持多种方式的options选项:
UNIX选项
要求必须在选项前加上“-”。 比如:
ps -e #打印全部进程信息
ps -ef #以全信息格式打印全部进程信息
输出格式如下:
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 7月15 ? 00:00:10 /sbin/init splash
root 2 0 0 7月15 ? 00:00:00 [kthreadd]
root 3 2 0 7月15 ? 00:00:04 [ksoftirqd/0]
root 5 2 0 7月15 ? 00:00:00 [kworker/0:0H]
root 7 2 0 7月15 ? 00:01:31 [rcu_sched]
root 8 2 0 7月15 ? 00:00:00 [rcu_bh]
root 9 2 0 7月15 ? 00:00:00 [migration/0]
root 10 2 0 7月15 ? 00:00:00 [watchdog/0]
root 11 2 0 7月15 ? 00:00:00 [watchdog/1]
...
关键选项介绍如下:
-a:打印除了会话首进程和不连接终端的进程(daemon)之外的所有进程
-A: 选择打印所有的进程
-e: 和-A选项一样
-u:选择打印某个有效用户id的进程
-U:选择打印某个真实用户id的进程
-f:全格式输出模式
-j:按照作业控制格式
BSD选项
BSD风格的输出会加上进程状态信息,并且在CMD那一列上会加上args,要求不能在选项前加上“-”。比如:
ps ax #输出所有进程信息
ps aux #以用户导向的格式输出所有进程信息
打印如下:
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 185716 5144 ? Ss 7月15 0:11 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 7月15 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 7月15 0:04 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 7月15 0:00 [kworker/0:0H]
root 7 0.1 0.0 0 0 ? S 7月15 1:51 [rcu_sched]
root 8 0.0 0.0 0 0 ? S 7月15 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 7月15 0:00 [migration/0]
root 10 0.0 0.0 0 0 ? S 7月15 0:00 [watchdog/0]
root 11 0.0 0.0 0 0 ? S 7月15 0:00 [watchdog/1]
root 12 0.0 0.0 0 0 ? S 7月15 0:00 [migration/1]
root 13 0.0 0.0 0 0 ? S 7月15 0:05 [ksoftirqd/1]
root 15 0.0 0.0 0 0 ? S< 7月15 0:00 [kworker/1:0H]
root 16 0.0 0.0 0 0 ? S 7月15 0:00 [watchdog/2]
root 17 0.0 0.0 0 0 ? S 7月15 0:00 [migration/2]
...
关键选项:
a:打印出所有拥有tty设备的进程(不一定是控制tty)包括其他用户,如果和x一起使用表示所有进程
u:按照用户导向的格式输出
x:输出所有属于当前用户id的进程(包括daemon),如果和a一起使用表示所有进程
j:按照作业控制格式输出
GNU 长选项
长选项是指以“–”指定的options选项,一般不太常用,本文不做过多介绍。详细信息参考man手册。
注意点
ps -aux
ps aux
使用以上两个命令,虽然看起来相似,并且运行时的输出一样,但是其实是两条不同的命令,“-aux”表示的是UNIX风格的选项,按照选项的解释,它表示打印有效用户为“x”的除了会话首进程之外的所有进程;而“aux”表示的是BSD风格选项,表示以用户导向的格式打印所有进程。
但是最后你会发现使用上述两者时打印都是以BSD选项的格式来输出的,这是为什么呢?原来针对“-aux”这种选项有一个隐含的操作,当发现系统中不存在“x”用户时,会按照BSD选项来解释它。所以这就是为什么两者输出一样的原因。
PS打印信息分析
-
如何查看内核线程?
内核线程在ps命令的输出中,COMMAND中会以“[]”来修饰,比如[kthreadd]、[watchdog/0]等等。 -
如何查看一个daemon进程?
使用“ps axj”按照作业控制格式输出所有进程,daemon进程都是不具有控制tty设备的,通过查看tty列,如果是一个“?”,那么说明他是一个daemon进程。