在Linux进程管理中常常需要查看进程的一些状态等信息,而Linux中也提供了许多可以令用户管理的命令。下面就来说一些常用的进程管理命令。
ps命令:
ps命令是Linux中常用并且非常强大的一个查看进程的命令。它可以查看有哪些进程正在运行和其运行状态、进程是否结束、有没有僵死状态、CPU的占用率、内存的占用率等;p常用于监控后台进程的工作情况。
ps命令用法
ps [option] [--help]
三种风格的选项
UNIX options, which may be grouped and mustbe preceded by a dash(-).表示必须带(-)
BSD options, which may be grouped and mustnot be used with a dash.表示必须不能带(-)
GNU long options, which are preceded by twodashes.长选项格式
常用选项
a:显示所有与终端相关的进程;
-a:显示现在正在执行的进程;
x:显示所有与终端无关的进程;
u:以用户为主显示进程状态信息;
-e:显示所有进程;
-f:显示完整格式的进程信息;
-H:以树状结构显示程序间的关系;
o:可自定义要显示的字段;
示例
ps不加任何选项
[root@localhost~]# ps PID TTY TIME CMD 2262 pts/0 00:00:00 bash 3094 pts/0 00:00:00 ps
显示结果中的4个信息的意义:
PID:运行着的命令(CMD)的进程编号
TTY:命令所运行的位置(终端)
TIME:运行着的该命令所占用的CPU处理时间
CMD:该进程所运行的命令
显示所有与终端相关的进程:
[root@localhost~]# ps a PID TTY STAT TIME COMMAND 2230 tty1 Ss+ 0:00 /sbin/mingetty/dev/tty1 2232 tty2 Ss+ 0:00 /sbin/mingetty/dev/tty2 2234 tty3 Ss+ 0:00 /sbin/mingetty/dev/tty3 2236 tty4 Ss+ 0:00 /sbin/mingetty/dev/tty4 2238 tty5 Ss+ 0:00 /sbin/mingetty/dev/tty5 2240 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6 2262 pts/0 Ss 0:00 -bash 3226 pts/0 R+ 0:00 ps a
显示目前正在执行中的进程
[root@localhost~]# ps -a PID TTY TIME CMD 3249 pts/0 00:00:00 ps
ax:显示所有进程
例:内容太多只截取部分
[root@localhost~]# ps ax PID TTY STAT TIME COMMAND 1 ? Ss 0:01 /sbin/init 2 ? S 0:00 [kthreadd] 3 ? S 0:00 [migration/0] 4 ? S 0:00 [ksoftirqd/0] 5 ? S 0:00 [stopper/0] 6 ? S 0:00 [watchdog/0]
常用选型组合:aux
例:
[root@localhost~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19364 1536 ? Ss 11:17 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 11:17 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 11:17 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S 11:17 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S 11:17 0:00 [stopper/0]
显示结果中的各字段的意义:
SUER:用户
PID:进程号
%CPU:该进程占用CPU的百分比;
%MEM:该进程占用物理内存的百分比;
VSZ:该进程虚拟内存的使用量;
RSS:该进程占用固定的内存量
TTY:运行该进程的终端
STAT:该程序目前的状态:
R:该进程处于运行状态;
S:该进程处于可中断睡眠状态;
D:该进程处于不可终止睡眠状态;
T:该进程正在侦测或者停止;
Z:该进程处于僵死状态;
+:前台(运行在终端上的)进程
l:多线程进程;
N:低优先级进程;
<:高优先级进程
s:session leader 会话主导者
说到这里我们还需要补充一下Linux上进程的5中状态:
1. 运行:正在运行或在运行队列中等待
2. 中断:休眠中, 受阻, 在等待某个条件的形成或接受到信号
3. 不可中断:收到信号不唤醒和不可运行, 进程必须等待直到有中断发生:
4. 僵死:进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放;
5. 停止:进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行
例:ps �Cef
[root@localhost ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 11:17 ? 00:00:01/sbin/init root 2 0 0 11:17 ? 00:00:00[kthreadd] root 3 2 0 11:17 ? 00:00:00[migration/0] root 4 2 0 11:17 ? 00:00:00[ksoftirqd/0]
ps �CefH
[root@localhost ~]# ps -efH UID PID PPID C STIME TTY TIME CMD root 2 0 0 11:17 ? 00:00:00[kthreadd] root 3 2 0 11:17 ? 00:00:00 [migration/0] root 4 2 0 11:17 ? 00:00:00 [ksoftirqd/0] root 5 2 0 11:17 ? 00:00:00 [stopper/0]
ps axo
例如:例只显示进程号和CMD
[root@localhost ~]# ps axo pid,command PID COMMAND 1 /sbin/init 2 [kthreadd] 3 [migration/0] 4 [ksoftirqd/0] 5 [stopper/0] 6 [watchdog/0] 7 [migration/1]
top命令:
能够实时显示系统中各个进程的资源占用状况
用法:
top [参数]
常用选项
-d#:指定刷新时间间隔,默认为3秒
-b:以批次方式显示;
-n#:显示多少批次;
交互命令:
P:以占据CPU百分比排序;
M:以占据内存百分比排序;
T:累积占用CPU时间排序;
q:退出;
k:终止指定的进程;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:显示内存和CPU状态信息;
示例1:显示进程信息
[root@localhost~]# top top -18:10:00 up 6:52, 1 user, load average: 0.00, 0.00, 0.00 Tasks:116 total, 1 running, 115sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1004768k total, 252256k used, 752512k free, 73708k buffers Swap: 2097148k total, 0k used, 2097148k free, 59608k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19364 1536 1228 S 0.0 0.2 0:01.44 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
显示的前五行为统计信息区,下面来看一下每行信息的具体意义:
第一行为任务队列信息,从左至右依次为:
-18:10:00:当前系统时间;
up 6:52 :系统已经运行了6分52秒;
1 user:当前有1个用户登录系统;
loadaverage: 0.00, 0.00, 0.00:load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况;
第二行为任务进程信息:
目前有116个进程,其中1个正在运行,115个处于睡眠状态,0个停止,0个僵死状态;
第三行为CPU状态信息:
0.0%us:用户占用CPU的百分比;
0.0%sy:内核占用CPU的百分比;
0.0%ni:更改过优先级的进程占用CPU的百分比;
100.0%id:空闲CPU的百分比;
0.0%wa:IO等待占用CPU的百分比;
0.0%hi:硬中断(HardwareIRQ)占用CPU的百分比;
0.0%si:软中断(SoftwareInterrupts)占用CPU的百分比;
0.0%st:被虚拟化程序偷走的CPU百分比;
第四行为内存状态信息:
1004768ktotal:物理内存总量 ;
252256kused:使用中的内存总量;
752512kfree:空闲内存总量;
73708kbuffers:缓存的内存总量;
第五行为swap交换分区的信息:
2097148ktotal:交换分区总量;
0kused:使用的交换分区总量;
2097148kfree:空闲的交换分区总量;
59608kcached:缓冲的交换分区总量;
示例2:以占据CPU百分比排序
[root@localhost~]# top #p top -18:23:11 up 7:05, 1 user, load average: 0.00, 0.00, 0.00 Tasks:116 total, 1 running, 115sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 1004768k total, 252288k used, 752480k free, 73948k buffers Swap: 2097148k total, 0k used, 2097148k free, 59616k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1735 root 20 0 18300 756 476 S 0.3 0.1 0:05.87 irqbalance 3516 root 20 0 15032 1220 928 R 0.3 0.1 0:00.04 top 1 root 20 0 19364 1536 1228 S 0.0 0.2 0:01.44 init
示例3:显示CPU状态
[root@localhost~]# top # t top -18:25:48 up 7:08, 1 user, load average: 0.00, 0.00, 0.00 Mem: 1004768k total, 252132k used, 752636k free, 73972k buffers Swap: 2097148k total, 0k used, 2097148k free, 59616k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 11 root 20 0 0 0 0 S 0.3 0.0 0:18.64 events/0 1 root 20 0 19364 1536 1228 S 0.0 0.2 0:01.44 init
可以看到CPU相关的信息已关闭,想要显示按t即可;
htop命令
htop命令也是用来查看进程的,它和top相似,也可以说是top的高级版;
需要注意的是htop并不是系统自带的,需要自己安装。
常用选项:
-d#:指定延迟时间间隔;
-u Username:仅显示指定用户的进程
-s COLUME:以指定字段进行排序;
交互命令:
l :显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程状态;
a:将选定的进程绑定至某指定的CPU核心;
直接运行htop
可以看到最底部的一些选项,可用鼠标直接点击;
查看帮助:F1或直接用鼠标点击Help
htop设置:鼠标点击Setup或者按下F2
按下F4,进入过滤器,相当于关键字搜索,不区分大小写,例如过滤dev
以PID排序,直接用鼠标点击PID即可:
dstat命令
dstat是一款全能的系统监控工具,它可以收集系统的各种信息;在获取信息上类似于top、vmstat等,可以说是多个工具的合集。
用法
dstat [-afv] [options..] [delay [count]]
常用选项:
-c,--cpu :显示CPU相关信息;
-C#,#..total :查看指定CPU的信息;
-d ,--disk :显示磁盘的相关信息;
-D sda,sdb .. total:统计指定磁盘的信息;
-g:显示page相关的速率数据;
-m:Memory的相关统计数据
-n:Interface的相关统计数据;
-p:显示process的相关统计数据;
-r:显示io请求的相关的统计数据;
-s:显示swapped的相关统计数据;
--top-cpu:显示最占用CPU的进程;
--top-io:最占用io的进程;
--top-mem:最占用内存的进程;
--top-lantency:延迟最大的进程
例1:用dstat查看并每2秒刷新一次,3次后退出
[root@localhost~]# dstat 2 3 Youdid not select any stats, using -cdngy by default. ----total-cpu-usage-----dsk/total- -net/total- ---paging-- ---system-- usrsys idl wai hiq siq| read writ|recv send| in out | int csw 0 0100 0 0 0|5627B 1026B| 0 0 | 0 0 | 39 32 0 0100 0 0 0| 0 0 | 948B 586B| 0 0 | 37 33 0 0100 0 0 0| 0 0 | 180B 338B| 0 0 | 23 21 0 0 99 0 0 0| 0 0 |6752B 338B| 0 0 | 80 34
例2:找出占用资源最高的进程和用户
[root@localhost~]# dstat --top-mem --top-io --top-cpu --most-expensive-----most-expensive---- -most-expensive- memory process | i/o process | cpu process tuned 15.0M|bash 16k 120B|kworker/0:0 0.0 tuned 15.0M|irqbalance 8259B 0 | tuned 15.0M|sshd: root@ 148B 196B|rcuos/0 0.5 tuned 15.0M|sshd: root@ 162B 212B| tuned 15.0M|sshd: root@ 155B 196B| tuned 15.0M|sshd: root@ 155B 196B| tuned 15.0M|sshd: root@ 155B 196B|kworker/0:0 0.5 tuned 15.0M|sshd: root@ 162B 212B| tuned 15.0M|sshd: root@ 155B 196B|tuned 0.5