Linux命令行与shell脚本编程大全 第3版
- 第四章 更多的bash shell命令
- 监测程序
第四章 更多的bash shell命令
监测程序
当程序运行在系统上时,我们称之为进程(process)。想监测这些进程,需要熟悉
ps
命令的用法。
$ ps
Linux系统中使用的GNU ps命令支持3种不同类型的命令行参数:
Unix风格的参数,前面加单破折线;
BSD风格的参数,前面不加破折线;
GNU风格的长参数,前面加双破折线;
举个例子,如果你想查看系统上运行的所有进程,可用**-ef**参数组合。
$ ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 11:29 ? 00:00:01 init [5]root 2 0 0 11:29 ? 00:00:00 [kthreadd]root 3 2 0 11:29 ? 00:00:00 [migration/0]root 4 2 0 11:29 ? 00:00:00 [ksoftirqd/0]root 5 2 0 11:29 ? 00:00:00 [watchdog/0]root 6 2 0 11:29 ? 00:00:00 [events/0]root 7 2 0 11:29 ? 00:00:00 [khelper]root 47 2 0 11:29 ? 00:00:00 [kblockd/0]root 48 2 0 11:29 ? 00:00:00 [kacpid]68 2349 1 0 11:30 ? 00:00:00 haldroot 3078 1981 0 12:00 ? 00:00:00 sshd: rich [priv]rich 3080 3078 0 12:00 ? 00:00:00 sshd: rich@pts/0rich 3081 3080 0 12:00 pts/0 00:00:00 -bashrich 4445 3081 3 13:48 pts/0 00:00:00 ps -ef$
UID:启动这些进程的用户。
PID:进程的进程ID。
PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
C:进程生命周期中的CPU利用率。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。
TIME:运行进程需要的累计CPU时间。
CMD:启动的程序名称。
如果想要获得更多的信息,可采用**-l**参数,它会产生一个长格式输出。
$ ps -lF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD0 S 500 3081 3080 0 80 0 - 1173 wait pts/0 00:00:00 bash0 R 500 4463 3081 1 80 0 - 1116 - pts/0 00:00:00 ps$
F:内核分配给进程的系统标记。
S:进程的状态(O代表正在运行;S代表在休眠;R代表可运行,正等待运行;Z代表僵化,进程已结束但父进程已不存在;T代表停止)。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI:谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:进程休眠的内核函数的地址。
在使用BSD参数时,ps命令会自动改变输出以模仿BSD格式。下例是使用l参数的输出:
$ ps lF UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND0 500 3081 3080 20 0 4692 1432 wait Ss pts/0 0:00 -bash0 500 5104 3081 20 0 4468 844 - R+ pts/0 0:00 ps l$
VSZ:进程在内存中的大小,以千字节(KB)为单位。
RSS:进程在未换出时占用的物理内存。
STAT:代表当前进程状态的双字符状态码。
BSD风格的l参数能输出更详细的进程状态码(STAT列)。第一个字符采用了和Unix风格S列相同的值,表明进程是在休眠、运行还是等待。第二个参数进一步说明进程的状态。
<:该进程运行在高优先级上。
N:该进程运行在低优先级上。
L:该进程有页面锁定在内存中。
s:该进程是控制进程。
l:该进程是多线程的。
+:该进程运行在前台。
可以将GNU长参数和Unix或BSD风格的参数混用来定制输出。GNU长参数中的**–forest**参数会显示进程的层级信息,并用ASCII字符绘出图表,这种格式让跟踪子进程和父进程变得十分容易。
ps命令只能显示某个特定时间点的进程信息。
top
命令跟ps命令相似,能够显示进程信息,但它是实时显示的。