ps -- 查看进程
ps
命令:用于查看进程相关信息,默认只显示前台进程。
命令使用格式:ps [选项]
常用的参数:
(1) a: 显示跟当前终端关联的所有进程。
(2) u: 基于用户的格式显示(U: 显示某用户 ID 所有的进程)。
(3) x: 显示所有进程,不以终端机来区分。
例 10.1:常用的选项组合是 ps -aux。
[root@xuegod63 ~]# ps -axu | more #查看进程,如图 10-2 所示。
图 10-2 查看进程
注: 最后一列[xxxx] 使用方括号括起来的进程是内核态的进程,没有括起来的是用户态进程。
上面的参数输出每列含意:
USER: 启动这些进程的用户。
PID: 进程的 ID。
%CPU 进程占用的 CPU 百分比。
%MEM 占用内存的百分比。
VSZ:进程占用的虚拟内存大小(单位:KB)。
RSS:进程占用的物理内存大小(单位:KB)。
STAT:该程序目前的状态,Linux 进程有 5 种基本状态:
R :该程序目前正在运作,或者是可被运作。
S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
T :该程序目前正在侦测或者是停止了。
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序状态。
D :不可中断状态。
5 个基本状态后,还可以加一些字母,比如:Ss、R+,如图 10-3 所示。
图 10-3 进程状态
含意如下:
<:表示进程运行在高优先级上。
N:表示进程运行在低优先级上。
L:表示进程有页面锁定在内存中。
S:表示进程是控制进程。
L:表示进程是多线程的。
+:表示当前进程运行在前台。
START:该 process 被触发启动的时间。
TIME :该 process 实际使用 CPU 运作的时间。
COMMAND:该程序的实际指令。
例 10.2: 查看进程状态。
[root@xuegod63 ~]# vim a.txt
(1) 在另一个终端执行:
[root@xuegod63 ~]# ps -aux | grep a.txt #查看状态 S 表示睡眠状态,+ 表示前台。
root 4435 0.0 0.2 151752 5292 pts/1 S+ 20:52 0:00 vim a.txt
root 4661 0.0 0.0 112676 996 pts/0 S+ 21:05 0:00 grep --color=auto
a.txt
(2) 在 vim a.txt 这个终端上按下: ctrl+z
[1] + 已停止 vim a.txt
(3) 在另一个终端执行。
[root@xuegod63 ~]# ps -aux | grep a.txt #查看状态 T 表示停止状态。
root 4435 0.0 0.2 151752 5292 pts/1 T 20:52 0:00 vim a.txt
root 4675 0.0 0.0 112676 996 pts/0 S+ 21:05 0:00 grep --color=auto
a.txt
注:
1、 ctrl-c 是发送 SIGINT 信号,终止一个进程。
2、 ctrl-z 是发送 SIGSTOP 信号,挂起一个进程。将作业放置到后台(暂停)。
3、 ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销。
例 10.3: D 不可中断状态。
[root@xuegod63 ~]# tar -zcvf usr-tar.gz /usr/ #解压文件。
(1) 然后在另一个终端不断查看状态,由 S+,R+变为 D+ 如图 10-4 所示。
图 10-4 不可中断状态
ps 常用的参数: ps -ef
-e 显示所有进程。
-f 显示完整格式输出。
常用的组合: ps -ef 如图 10-5 所示。
图 10-5 ps -ef 执行结果
包含的信息如下
1、 UID: 启动这些进程的用户。
2、 PID: 进程的 ID。
3、 PPID: 父进程的进程号。
4、 C: 进程生命周期中的 CPU 利用率。
5、 STIME: 进程启动时的系统时间。
6、 TTY: 表明进程在哪个终端设备上运行。如果显示?表示不终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。
7、 TIME: 运行进程一共累计占用的 CPU 时间。
8、 CMD: 启动的程序名称。
例 10.4:测试 CPU 使用时间。
[root@localhost ~]# dd if=/dev/zero of=/a.txt count=10 bs=100M #使用 dd 命令生成一个
1G 的文件。
[root@localhost ~]# ps -axu | grep dd #查看进程,并过虑 dd 进程。
注:
1、 ps aux 是用 BSD 的格式来显示进程。
2、 ps -ef 是用标准的格式显示进程。