Linux进程管理工具pstree、ps、pgrep、killall、kill、pkill、lsof、vmstat

Linux进程管理工具

一、pstree命令:查看进程树之间的关系,父进程与子进程

命令 作用
-A 各进程树之间的连接以ASCII码字符来连接
-U 各进程树之间的连接以utf8字符连接,某些终端可能会有错误
-p 同时列出每个进程的PID
-u 同时列出每个进程的所属账号名称

在用pstree命令之前先安装pstree命令
yum install psmisc-22.20-11.el7.x86_64 -y

Linux进程管理工具pstree、ps、pgrep、killall、kill、pkill、lsof、vmstat_第1张图片

二、ps命令

命令 作用
-A 所有的进程均显示出来,与 -e 具有同样的效用
-a 显示现行终端机下的所有进程,包括其他用户的进程
-u 以用户为主的进程状态
x 通常与 a 这个参数一起使用,可列出较完整信息
l 较长、较详细的将该PID 的的信息列出
j 工作的格式
-f 做一个更为完整的输出
[root@192 ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   2038   2027  0  80   0 - 27081 wait   pts/0    00:00:00 bash
4 R     0   2131   2038  1  80   0 - 27037 -      pts/0    00:00:00 ps
F 代表这个程序的旗标 (flag)

4 代表使用者为 superuser

S 代表这个程序的状态 (STAT)

UID 代表执行者身份

PID 进程的ID号

PPID 父进程的ID

C CPU使用的资源百分比

PRI指进程的执行优先权,其值越小越早被执行

NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值

ADDR 这个是内核函数,指出该程序在内存的那个部分

SZ 使用掉的内存大小

WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;

TTY 登入者的终端机位置;

TIME 使用掉的 CPU 时间

CMD 所下达的指令名称
[root@192 ~]#  ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19232  1492 ?        Ss   Apr17   0:01 /sbin/init
root          2  0.0  0.0      0     0 ?        S    Apr17   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    Apr17   0:00 [migration/0]
root          4  0.0  0.0      0     0 ?        S    Apr17   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S    Apr17   0:00 [stopper/0]
root          6  0.0  0.0      0     0 ?        S    Apr17   0:00 [watchdog/0]

USER:该进程属于那个使用者账号。

PID :该进程的进程ID号。

%CPU:该进程使用掉的CPU资源百分比;

%MEM:该进程所占用的物理内存百分比;

VSZ :该进程使用掉的虚拟内存量 (Kbytes)

RSS :该进程占用的固定的内存量 (Kbytes)

TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。

STAT:该程序目前的状态,主要的状态有:

R :该程序目前正在运作,或者是可被运作;

S :该程序目前正在睡眠当中,但可被某些讯号(signal) 唤醒。

T :该程序目前正在侦测或者是停止了;

Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态

START:该进程被触发启动的时间;

TIME :该进程实际使用 CPU 运作的时间。

COMMAND:该程序的实际指令。

三、pgrep:查看进程的信息,包括进程的是否已经消亡,通过pgrep来获得正在被调度的进程的相关信息。

命令 选项
-l 同时显示进程名和PID
-o 当匹配多个进程时,显示进程号最小的那个
-n 当匹配多个进程时,显示进程号最大的那个

注:进程号越大,并不一定意味着进程的启动时间越晚

[root@192 ~]#  pgrep ssh
1324
2027
2031
[root@192 ~]#  pgrep -l ssh    #同时显示PID和进程名称
1324 sshd
2027 sshd
2031 sshd
[root@192 ~]#  pgrep -l -o ssh     #当匹配多个进程时,显示进程号最小的那个
1324 sshd
[root@192 ~]#  pgrep -l -n ssh     #当匹配多个进程时,显示进程号最大的那个

四、killall,kill,pkill

1、killall命令用于杀死指定名字的进程。

命令 作用
-Z 只杀死拥有scontext 的进程
-e 要求匹配进程名称
-I 忽略小写
-g 杀死进程组而不是进程
-i 交互模式,杀死进程前先询问用户
-l 列出所有的已知信号名称
-q 不输出警告信息
-s 发送指定的信号
-v 报告信号是否成功发送
-w 等待进程死亡
–help 显示帮助信息
–version 显示版本显示

杀死所有同名进程

  • killall nginx

  • killall -9 bash

向进程发送指定信号

  • killall -TERM ngixn

  • killall -KILL nginx

2、kill命令用来终止指定的进程的运行

  • 终止一个前台进程使用Ctrl+C键

  • 终止一个后台进程使用kill命令来终止

命令 作用
-l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
[root@192 ~]# kill -l    #列出所有信号名称
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
[root@192 ~]# kill -l KILL   #得到指定信号的数值
9
[root@192 ~]# kill -l SIGKILL
9
[root@192 ~]# kill -l TERM
15
[root@192 ~]# kill -l SIGTERM
15
[root@192 ~]# ps -ef | grep vim    #先用ps查找进程,然后用kill杀掉
root       2310   2038  0 06:18 pts/0    00:00:00 grep vim
[root@192 ~]# kill 2310

只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略

常用的信号:

  • HUP 1 终端断线

  • INT 2 中断(同 Ctrl + C)

  • QUIT 3 退出(同 Ctrl + \)

  • TERM 15 终止

  • KILL 9 强制终止

  • CONT 18 继续(与STOP相反, fg/bg命令)

  • STOP 19 暂停(同 Ctrl + Z)

3、pkill是ps命令和kill命令的结合,按照进程名来杀死指定进程

五、vmstat命令:是最常见Linux/Unix监控工具。

vmstat:可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率内存使用虚拟内存交换情况,IO读写情况
vmstat工具的使用是通过两个数字参数来完成的

  • 第一个:参数是采样的时间间隔数,单位是秒

  • 第二个:参数是采样的次数

[root@192 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 828992  10832  40852    0    0   559    32  254  252  4 13 63 20  0
[root@192 ~]# vmstat 1 3      1代表每1秒采集一次 3代表采集次数
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 828668  10832  41036    0    0   147     9   84   87  1  3 90  5  0
 0  0      0 828620  10832  41036    0    0     0     0   31   36  0  0 100  0  0
 0  0      0 828620  10832  41036    0    0     0     0   31   32  0  1 99  0  0
 
类别 选项及含义:
Process 
  r :等待执行的任务数
  B 等待IO的进程数量
  
Memory 
  swpd 正在使用虚拟的内存大小,单位k
  free 空闲物理内存大小 
  buff 已用的buff大小,对块设备的读写进行缓冲
  cache已用的cache大小,文件系统的cache
  nact  非活跃内存大小,即被标明可回收的内存,区别于free和active
  active 活跃的内存大小 

Swap
  si 每秒从交换区写入内存的大小(单位:kb/s)
  so 每秒从内存写到交换区的大小
  
IO
   bi 每秒读取的块数
   bo 每秒写入的块数
   
System
   in 每秒中断数,包括时钟中断,值越大,会看到由内核消耗的cpu时间会越多
   cs 每秒上下文切换数 值越大,会看到由内核消耗的cpu时间会越多
   
CPU
   Us 用户进程执行消耗cpu时间,us的值比较高时,说明用户进程消耗的cpu时间多
   Sy 系统进程消耗cpu时间,sys的值过高时,说明系统内核消耗的cpu资源多
   Id 空闲时间(包括IO等待时间)
   wa 等待IO时间 Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。
命令 作用
-V 显示vmstat版本信息
-n 显示vmstat版本信息只在开始时显示一次各字段名称
-a 显示活跃和非活跃内存
-d 显示各个磁盘相关统计信息
-D 显示磁盘总体信息
-p 显示指定磁盘分区统计信息
-s 显示内存相关统计信息及多种系统活动数量
-m 显示slabinfo
-t 在输出信息的时候也将时间一并输出出来
-S 使用指定单位显示。参数有k、K、m、M,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为:K(1024bytes)
delay 刷新时间间隔
count 刷新次数

注意:如果评估CPU,需要重点关注procs项的r列值和CPU想的us、sy、wa列的值

六、lsof是一个列出当前系统打开文件的工具

[root@192 ~]# lsof
COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init         1 root  cwd       DIR                8,2     4096          2 /
init         1 root  rtd       DIR                8,2     4096          2 /
init         1 root  txt       REG                8,2   150352     134610 /sbin/init
init         1 root  mem       REG                8,2    66432     133698 /lib64/libnss_files-2.12.so
init         1 root  mem       REG                8,2  1924768     133682 /lib64/libc-2.12.so
init         1 root  mem       REG                8,2    90912     143162 /lib64/libgcc_s-4.4.7-20120601.so.1
init         1 root  mem       REG                8,2    44472     133710 /lib64/librt-2.12.so
init         1 root  mem       REG                8,2   143280     133706 /lib64/libpthread-2.
......

每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。

lsof输出各列信息的意义如下:
1、COMMAND:进程的名称
2、PID:进程标识符
3、USER:进程所有者
4、FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
5、TYPE:文件类型,如DIR、REG等
6、DEVICE:指定磁盘的名称
7、SIZE:文件的大小
8、NODE:索引节点(文件在磁盘上的标识)
9、NAME:打开文件的确切名称

语法格式:

选项 作用
-c string 列出以 string 开头的进程打开的文件
-p pid 列出进程号为 PID 进程打开的文件
-u uname/uid 列出归属 uname/uid 的进程打开的文件
-g gname/gid 列出归属 gname/gid 的进程打开的文件
+d 目录 列出目录下所有被进程打开的文件
+D 目录 不但列出目录下的,同时也会搜索目录下的目录,时间较长
-d fd 列出文件描述符为 fd 的进程
-c string 列出以 string 开头的进程打开的文件
-c string 列出以 string 开头的进程打开的文件

例如:

1、递归查看usr/bin目录下所以打开的文件

[root@192 ~]# lsof +D /usr/lib
COMMAND  PID USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
crond   1357 root mem    REG    8,2 99174448 143178 /usr/lib/locale/locale-archive
bash    1410 root mem    REG    8,2 99174448 143178 /usr/lib/locale/locale-archive
bash    1431 root mem    REG    8,2 99174448 143178 /usr/lib/locale/locale-archive
lsof    1711 root mem    REG    8,2 99174448 143178 /usr/lib/locale/locale-archive
lsof    1712 root mem    REG    8,2 99174448 143178 /usr/lib/locale/locale-archive

2、列出所有打开的文件:

[root@192 ~]# lsof
COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init         1 root  cwd       DIR                8,2     4096          2 /
init         1 root  rtd       DIR                8,2     4096          2 /
init         1 root  txt       REG                8,2   150352     134610 /sbin/init
init         1 root  mem       REG                8,2    66432     133698 /lib64/libnss_files-2.12.so
init         1 root  mem       REG                8,2  1924768     133682 /lib64/libc-2.12.so
init         1 root  mem       REG                8,2    90912     143162 /lib64/libgcc_s-4.4.7-20120601.so.1
init         1 root  mem       REG                8,2    44472     133710 /lib64/librt-2.12.so
init         1 root  mem       REG                8,2   143280     133706 /lib64/libpthread-2.12.so
init         1 root  mem       REG                8,2   265728     134323 /lib64/libdbus-1.so.3.4.0
init         1 root  mem       REG                8,2    39896     134606 /lib64/libnih-dbus.so.1.0.0
init         1 root  mem       REG                8,2   101920     134608 /lib64/libnih.so.1.0.0
init         1 root  mem       REG                8,2   159312     131086 /lib64/ld-2.12.so
init         1 root    0u      CHR                1,3      0t0       4601 /dev/null

3、 查看某个文件被哪个进程调用

[root@192 ~]# lsof /sbin/init
COMMAND PID USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
init      1 root txt    REG    8,2   150352 134610 /sbin/init

4、列出某个用户打开的文件信息
lsof -u username

[root@192 tmp]# lsof -u root
COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init         1 root  cwd       DIR                8,2     4096          2 /
init         1 root  rtd       DIR                8,2     4096          2 /
init         1 root  txt       REG                8,2   150352     134610 /sbin/init
init         1 root  mem       REG                8,2    66432     133698 /lib64/libnss_files-2.12.so
init         1 root  mem       REG                8,2  1924768     133682 /lib64/libc-2.12.so
init         1 root  mem       REG                8,2    90912     143162 /lib64/libgcc_s-4.4.7-20120601.so.1
init         1 root  mem       REG                8,2    44472     133710 /lib64/librt-2.12.so
init         1 root  mem       REG                8,2   143280     133706 /lib64/libpthread-2.12.so
init         1 root  mem       REG                8,2   265728     134323 /lib64/libdbus-1.so.3.4.0

你可能感兴趣的:(Linux进程管理工具)