Linux进程管理命令ps和top

ps:查看进程

一.功能
ps命令用于列出执行ps命令的那个时候的进程快照,就像用收集给进程照了一张照片,如果想要动态地显示进程的信息,就需要使用top命令

二.常用选项说明

参数选项 解释说明
a 显示与终端相关的所有进程,包含每个进程的完整路径
x 显示与终端无关的所有进程
u 显示进程的用户信息
-e 显示所有进程
-f 额外显示UID,PPID,C与STIME栏位
-u 显示指定用户的进程
-H 显示进程树

三.使用范例
1.ps命令不接任何参数

[root@localhost ~]# ps
   PID TTY          TIME CMD
  9790 pts/0    00:00:00 bash
  9828 pts/0    00:00:00 ps


输出的是使用者当前所在终端的进程
PID:进程的标识号
TTY:进程所属的终端控制台
TIME:进程所使用的总的CPU的时间
CMD:正在执行的命令行

2.ps常用命令组合(1)
ps -ef :显示所有进程并显示出每个进程的UID和PPID还有STIME
-e显示所有进程
-f额外显示UID,PPID,C与STIME位

[root@localhost ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 20:01 ?        00:00:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 20:01 ?        00:00:00 [kthreadd]
root          3      2  0 20:01 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 20:01 ?        00:00:00 [kworker/0:0H]
root          6      2  0 20:01 ?        00:00:00 [kworker/u256:0]
root          7      2  0 20:01 ?        00:00:00 [migration/0]
......

UID:进程被该UID所拥有
PID:进程的标识号
PPID:进程的父进程的标识号
C:CPU使用资源百分比
STIME:start time,进程开始的时间
TTY:该进程在哪个终端上运行,若与终端机无关,则显示“?”tty1-tty6是本机上面的登入者进程,若为pts/0等,则表示通过网络接进主机的进程
TIME:进程使用的总的CPU的时间
CMD:正在执行的命令行

3.ps常用命令组合(2)
ps aux 显示所有进程和显示进程的用户信息
a:显示与终端相关的进程
x:显示与终端不相关的进程
u:显示用户的信息

[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0 125308  3776 ?        Ss   20:01   0:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    20:01   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    20:01   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   20:01   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    20:01   0:00 [kworker/u256:0]
root          7  0.0  0.0      0     0 ?        S    20:01   0:00 [migration/0]
......

USER:该进程属于的用户
PID:进程的进程号
%CPU:该进程使用掉的CPU资源百分比
%MEM:该进程所占用的物理内存百分比
VSZ:该进程使用掉的虚拟内存量
RSS:该进程占用的固定的内存量
TTY:该进程在哪个终端上运行,若与终端机无关,则显示“?”tty1-tty6是本机上面的登入者进程,若为pts/0等,则表示通过网络接进主机的进程
STAT:该进程目前的状态
     R:正在运行,或者是可以运行
     S:正在终端睡眠中,可以由某些信号(signal)唤醒
     D:不可中断睡眠
     T:正在侦测或者停止了
     Z:已经终止,但是其父进程无法正常终止它,从而变成zombie(僵尸)进程的状态
     +:前台进程
     1:多线程进程
     N:低优先级进程
     <:高优先级进程
     s:进程领导者
START:该进程被触发启动的时间
TIME:该进程实际使用CPU运作的时间
COMMAND:该进程的实际命令

4.显示指定用户相关进程信息

[root@localhost ~]# ps -u root
   PID TTY          TIME CMD
     1 ?        00:00:00 systemd
     2 ?        00:00:00 kthreadd
     3 ?        00:00:00 ksoftirqd/0
     5 ?        00:00:00 kworker/0:0H
     6 ?        00:00:00 kworker/u256:0
     7 ?        00:00:00 migration/0
     8 ?        00:00:00 rcu_bh

5.显示进程树
ps -eH
-e:显示所有进程
-H:显示进程树

[root@localhost ~]# ps -eH
   PID TTY          TIME CMD
     2 ?        00:00:00 kthreadd
     3 ?        00:00:00   ksoftirqd/0
     5 ?        00:00:00   kworker/0:0H
     6 ?        00:00:00   kworker/u256:0
     7 ?        00:00:00   migration/0
     8 ?        00:00:00   rcu_bh
......
  9240 ?        00:00:00   sshd
  9788 ?        00:00:00     sshd
  9790 pts/0    00:00:00       bash
  9855 pts/0    00:00:00         ps
  9242 ?        00:00:00   rsyslogd
  9546 ?        00:00:00   master


看sshd部分

pstree:显示进程状态树

一.功能
pstree命令以树形结构显示进程和进程之间的关系

二.使用案例

[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─agetty
        ├─auditd───{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-daemon
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───6*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vmtoolsd───{vmtoolsd}

pgrep:查找匹配条件的进程

一.功能
pgrep可以查找匹配条件的进程号

二.使用案例

[root@localhost ~]# pgrep ssh
9240
9788

kill:终止进程

一.功能
kill命令能够终止你希望停止的进程

二.选项说明

参数选项 解释说明
-l 列出全部的信号名称
-p 指定kill命令只打印相关进程的进程号,而不发送任何信号
-s 指定要发送的信号

三.使用案例
1.列出所有信号的名称

[root@localhost ~]# 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	

常用信号
HUP(1):挂起,通常因为终端掉线或用户退出而引发
INT(2):中断,通常是因为按下Ctrl+c组合键来发出这个信号
QUIT(3):退出,通常是按下Ctrl+\组合键来发出这个信号
KILL(9):立即结束进程的运行
TERM(15):终止,通常在系统关机时发送
TSTP(20):暂停进程的运行,通常是按下Ctrl+z组合键来发出这个信号

2.终止某个进程
kill指令默认使用的是信号15,用于结束进程,如果进程忽略此信号,则可以使用信号9强制终止进程,一般是先通过ps查看要终止的进程号,然后就使用kill <进程号>就可以了

[root@localhost ~]# ps  aux | grep docker
root      10188  1.8  2.2 586368 85356 ?        Ssl  21:46   0:02 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root      10425  0.0  1.3 301988 51108 pts/0    Sl+  21:47   0:00 docker run nginx

kill 10188
kill -s 15 10188
kill -15 10188

以上三条命令所代表的含义都是相同的,都是给docker run nginx这个进程发送信号15来关闭
如果使用15信号无法关闭指定进程的话,可以使用kill -9 10188来进行关闭

killall:通过进程名终止进程

一.功能
使用kill命令终止进程还需要先获取进程的pid进程号,而使用killall命令就可以直接用“killall 进程名”这种形式终止进程

二.选项说明

参数选项 解释说明
-u 终止指定用户的进程
-w 等待所有被终止的进程死去,killall每秒都会检查一次被终止的进程是否仍然存在,其仅在都死光后才返回。注意,如果信号被忽略,或者没有起作用,或者进程停留在僵尸状态,那么killall可能会永久等待

三.使用案例
1.终止定时任务的进程名

[root@localhost ~]# killall crond
[root@localhost ~]# killall crond
crond: no process found

2.终止指定用户的所有进程

killall -u fuxiangyu nginx
终止所有归属于fuxiangyu用户的nginx进程

pkill:通过进程名终止进程

一.功能
pkill命令可通过进程名终止指定的进程。使用killall终止进程需要联系执行几次,而pkill可以杀死指定进程及其所有子进程

二.选项说明

参数选项 解释说明
-t 终端用户 杀死指定终端的进程
-u 用户 杀死指定用户的进程

三.使用案例
1.通过进程名终止进程

pkill crond 

2.通过终端名终止进程

使用w查看终端登录情况
[root@localhost ~]# w
 22:05:55 up  2:04,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.10.1     20:48    3.00s  0.11s  0.00s w
root     pts/1    192.168.10.1     21:48    3:23   0.01s  0.01s -bash
fuxiangy pts/2    192.168.10.1     22:03    2:02   0.00s  0.00s -bash

我们使用通过终端名的方式来杀死进程 pts/2
此时我们使用终端pts/2打开了一个文件	
[fuxiangyu@localhost ~]$ vim fuxiangyu.txt

此时在另一个终端上使用命令
[root@localhost ~]# pkill -t pts/2

回到之前的终端来查看
[fuxiangyu@localhost ~]$ vim fuxiangyu.txt
Vim: Caught deadly signal TERM

Vim: Finished.
Terminated

收到了终止进程的信号,正在执行的进程被终止了

3.通过用户名终止进程

还是先查看登录终端,我们要通过用户名将fuxiangyu这个用户下的进程关闭
[root@localhost ~]# w
 22:07:17 up  2:05,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.10.1     20:48    5.00s  0.12s  0.00s w
root     pts/1    192.168.10.1     21:48    4:45   0.01s  0.01s -bash
fuxiangy pts/2    192.168.10.1     22:03    3:24   0.00s  0.00s -bash

在终端上使用命令
[root@localhost ~]# pkill -u fuxiangyu

可以发现fuxiangyu这个终端被强制下线了!

top:实时显示系统中各个进程资源占用状态

一.功能
top命令用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个进程的资源占用状况。该命令可以按照CPU的使用,内存的使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式命令进行设定显示

二.选项说明

参数选项 解释说明
-a 将进程按照使用内存排序
-b 以批处理的模式显示进程信息 ,输出结果可以传递给其他程序或写入到文件中,在这种模式下,top命令不会接受任何输入,一直运行直到到达-n选项设定的阈值,或者按Ctrl+c等组合键终止程序
-c 显示进程的整个命令路径,而不是只显示命令名称
-d 指定每两次屏幕信息刷新之间的时间间隔
-n top输出信息更新的次数,完成后将退出top命令
-p 显示指定的进程信息

三.使用范例
1.显示进程信息

[root@localhost ~]# top
top - 22:21:58 up  2:20,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  98 total,   1 running,  97 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  6.2 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3861484 total,  2754940 free,   207496 used,   899048 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  3335064 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                           
     1 root      20   0  125448   3980   2608 S  0.0  0.1   0:01.25 systemd                                                           
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                          
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.35 ksoftirqd/0                                                       
     5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                                      
     6 root      20   0       0      0      0 S  0.0  0.0   0:00.19 kworker/u256:0                                                    
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                                                       
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                                                            
     9 root      20   0       0      0      0 S  0.0  0.0   0:00.37 rcu_sched                                                         
    10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain                                                     
    11 root      rt   0       0      0      0 S  0.0  0.0   0:00.04 watchdog/0                                                        
    13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs                                                         
    14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                                                             
    15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 khungtaskd                                                        
    16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback    

第一行:
    22:21:58 :当前系统时间
    up  2:20 :运行了两个小时20分钟了
    2 users  :当前有两个用户登录系统
    load average: 0.00, 0.01, 0.05:分别表示1分钟,5分钟,15分钟的平均负载情况

第二行:进程统计Tasks:
    98 total:系统共有98个进程
    1 running:处于运行状态的有一个
    97 sleeping:一个处于休眠状态
    0 stopped:stoped状态0个
    0 zombie :zombie状态(僵死)的有0个

第三行:CPU状态信息 %Cpu(s)
    0.0 us:用户空间占用CPU的百分比
    6.2 sy:内核空间占用CPU的百分比
    0.0 ni:改变过优先级的进程占用CPU的百分比
    93.8 id:空闲CPU占用百分比
    0.0 wa:I/O等待占用的CPU百分比
    0.0 hi:硬中断占用CPU的百分比
    0.0 si:软中断占用CPU的百分比
    0.0 st:虚拟机占用CPU的百分比
    
第四行:内存状态 KiB Mem : 
    3861484 total:物理内存总量
    2754940 free:使用中的内存总量
    207496 used:空闲内存总量
    899048 buff/cache:缓冲的内存量

第五行:swap交换分区信息 KiB Swap:
    4063228 total:交换区总量
    4063228 free:交换区空闲总量
    0 used:使用的交换区总量
    3335064 avail Mem:缓存的内存量

第六行:空行

第七行:给出的是各进程(任务)的状态监控
    PID:进程ID
    USER:进程所有者
    PR:进程优先级
    NI:nice值,负值表示高优先,正值表示低优先级
    VIRT:进程使用的虚拟内存总量,单位为kb
    RES:进程使用的,未被换出的物理内存大小,单位为kb
    SHR:共享内存大小,单位为kb
    S:进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠 T=跟踪/停止 ,Z=僵尸进程
    %CPU:上次更新到限制的CPU时间占用百分比
    %MEM:进程使用的物理内存百分比
    TIME+:进程使用的CPU时间总计,单位为1/100秒
    COMMAND:进程名称(命令名/命令行)
    

2.显示多核不同核CPU的信息
top还支持交互,我们可以在top运行时按数字“1”来查看各个CPU的状态

操作前
top - 22:54:33 up 1 min,  1 user,  load average: 0.15, 0.12, 0.05
Tasks: 124 total,   1 running, 123 sleeping,   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
KiB Mem :  3861512 total,  3540468 free,   115952 used,   205092 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  3500976 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                          
     1 root      20   0  190844   3812   2564 S   0.0  0.1   0:00.91 systemd                                                          
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd                                                         
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftirqd/0                                                      
     4 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0                                                      
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H  

操作后  
top - 22:54:55 up 2 min,  1 user,  load average: 0.11, 0.11, 0.05
Tasks: 124 total,   2 running, 122 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3861512 total,  3540352 free,   116068 used,   205092 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  3500860 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                          
    60 root      20   0       0      0      0 S   0.6  0.0   0:00.07 kworker/3:1                                                      
 18814 root      20   0  162000   2244   1580 R   0.6  0.1   0:00.01 top                                                              
     1 root      20   0  190844   3812   2564 S   0.0  0.1   0:00.91 systemd                                                          
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd                                                         
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftirqd/0                                                      
     4 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0                                                      
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                                     
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kworker/u256:0                                                   
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.02 migration/0         
发布了24 篇原创文章 · 获赞 10 · 访问量 2359

猜你喜欢

转载自blog.csdn.net/flat0809/article/details/103304988