Linux进程管理篇-运维工程师的自我救赎

对着背影说爱祢 提交于 2020-02-16 23:47:56

概要

本文围绕Linux进程管理,对进程管理的目的,常用命令,包括ps、top、kill、nice等进行了介绍和分析。

一、进程管理简介

1. 概念

下面这句话是百度搜到的进程定义:进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源
个人理解的进程:每个运行的程序或服务都会产生一个或多个进程

2. 目的

1)判断服务器的健康状态,常用命令top
2)查看系统中的所有进程,常用命令ps pstree
3)杀死指定进程,常用命令kill killall pkill
4)管理进程优先级,常用命令nice

二、进程的查看-ps和pstree命令

1. ps的两组命令

ps aux
#查看系统所有进程,使用BSD操作系统格式
ps -le
#查看系统所有进程,使用Linux标准命令格式
选项
-a 显示一个终端的所有进程,除了会话引线
-u 显示进程的归属用户及内存的使用情况
-x 显示没有控制终端的进程
-l 显示更加详细的信息,长格式显示
-e 显示所有进程,和-A作用一样

[root@VM_0_17_centos ~]# ps aux | grep httpd
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      8583  0.0  0.1 177472  3836 ?        Ss   Feb15   0:02 /usr/sbin/httpd
apache    8585  0.0  0.1 177608  3108 ?        S    Feb15   0:00 /usr/sbin/httpd
apache    8586  0.0  0.1 177608  3188 ?        S    Feb15   0:00 /usr/sbin/httpd
apache    8587  0.0  0.1 177608  3136 ?        S    Feb15   0:00 /usr/sbin/httpd
apache    8588  0.0  0.1 177608  3196 ?        S    Feb15   0:00 /usr/sbin/httpd
apache    8589  0.0  0.1 177608  3192 ?        S    Feb15   0:00 /usr/sbin/httpd
apache    8590  0.0  0.1 177608  3192 ?        S    Feb15   0:00 /usr/sbin/httpd
apache    8591  0.0  0.1 177608  3120 ?        S    Feb15   0:00 /usr/sbin/httpd
apache    8592  0.0  0.1 177608  3188 ?        S    Feb15   0:00 /usr/sbin/httpd
apache   22667  0.0  0.1 177608  3192 ?        S    Feb15   0:00 /usr/sbin/httpd
root     31887  0.0  0.0 103332   840 pts/0    S+   19:09   0:00 grep httpd
[root@VM_0_17_centos ~]# 

上面为ps aux查看apache进程的显示结果,每一列的含义分别是:
USER:进程所归属用户
PID:进程的ID号
%CPU:该进程所占用的CPU百分比
%MEM:该进程所占用的内存百分比
VSZ:该进程所占用的虚拟内存的大小,单位kb
RSS:该进程所占用的真实内存的大小,单位kb
TTY:归属用户的登录终端号,?代表系统用户,tty1-6代表本地字符界面终端,tty7是图形终端,pts/0-65535代表虚拟终端
STAT:进程状态,常见的有:R运行;S睡眠;T停止状态;s包含子进程;+位于后台
START:该进程的启动时间
TIME:该进程占用CPU的运算时间,注意不是系统时间
COMMAND:产生此进程的命令名

2. pstree命令

[root@VM_0_17_centos ~]# pstree [选项]
选项
-p:显示进程的PID
-u:显示进程的所属用户

[root@VM_0_17_centos ~]# pstree -pu
init(1)─┬─YDLive(1545)───{YDLive}(1559)
        ├─YDService(1556)─┬─{YDService}(1564)
        │                 ├─{YDService}(1565)
        │                 ├─{YDService}(1566)
        │                 ├─{YDService}(2277)
        │                 ├─{YDService}(2278)
        │                 ├─{YDService}(2293)
        │                 ├─{YDService}(2294)
        │                 ├─{YDService}(2295)
        │                 ├─{YDService}(2296)
        │                 ├─{YDService}(2297)
        │                 ├─{YDService}(2298)
        │                 └─{YDService}(2309)
        ├─abrtd(1294)
        ├─acpid(1247)
        ├─agetty(780)
        ├─atd(1342)
        ├─auditd(1091)───{auditd}(1092)
        ├─barad_agent(1757)─┬─barad_agent(1758)
        │                   └─barad_agent(1759)─┬─{barad_agent}(1783)
        │                                       ├─{barad_agent}(1826)
        │                                       └─{barad_agent}(1724)
        ├─crond(1327)
        ├─dbus-daemon(1209,dbus)
        ├─dhclient(1024)
        ├─httpd(8583)─┬─httpd(8585,apache)
        │             ├─httpd(8586,apache)
        │             ├─httpd(8587,apache)
        │             ├─httpd(8588,apache)
        │             ├─httpd(8589,apache)
        │             ├─httpd(8590,apache)
        │             ├─httpd(8591,apache)
        │             ├─httpd(8592,apache)
        │             └─httpd(22667,apache)
        ├─mingetty(1534)
        ├─mingetty(1536)
        ├─mingetty(1538)
        ├─mingetty(1540)
        ├─mingetty(1542)
        ├─mingetty(1544)
        ├─ntpd(1282,ntp)
        ├─rsyslogd(1113)─┬─{rsyslogd}(1114)
        │                ├─{rsyslogd}(1116)
        │                └─{rsyslogd}(1117)
        ├─sgagent(1739)───{sgagent}(1740)
        ├─sshd(1271)─┬─sshd(1722)───sshd(1723,sshd)
        │            └─sshd(22317)───bash(22337)───pstree(1729)
        └─udevd(471)───udevd(717)
[root@VM_0_17_centos ~]# 

三、进程的查看-top命令

[root@VM_0_17_centos ~]# top [选项]
选项
-d:指定top命令自动更新的时间,默认为3秒
-b:使用批处理模式输出,一般和-n合用
-n:指定top命令的执行次数,一般和-b合用

[root@VM_0_17_centos ~]# top
top - 19:35:10 up 1 day,  3:36,  1 user,  load average: 0.00, 0.00, 0.01
Tasks:  89 total,   1 running,  88 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.7%us,  0.7%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2054344k total,   802152k used,  1252192k free,   123556k buffers
Swap:        0k total,        0k used,        0k free,   525568k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                        
 1759 root      20   0  525m  13m 2340 S  1.0  0.7   4:36.07 barad_agent                                                                                     
 1545 root      20   0  101m 2252 1840 S  0.3  0.1   0:08.68 YDLive                                                                                          
    1 root      20   0 19368 1556 1236 S  0.0  0.1   0:01.22 init                                                                                            
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                        
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                                                                                     
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.40 ksoftirqd/0                                                                                     
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0                                                                                       
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.08 watchdog/0                                                                                      
    7 root      20   0     0    0    0 S  0.0  0.0   0:04.35 events/0                                                                                        
    8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events/0                                                                                        
    9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_long/0                                                                                   
   10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_power_ef                                                                                 
   11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup                                                                                          
   12 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper                                                                                         
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns                                                                                           
   14 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr                                                                                       
   15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm       

在top命令的交互模式中可执行如下命令:
P:以CPU使用率排序,默认就是该项
M:以内存使用率排序
N:以PID排序
q:退出top

四、杀死进程-kill killall和pkill命令

1. kill -l

查看可用的进程信号

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

其中常用到的两个信号为:
1 SIGHUP:该信号让进程立即关闭,然后重新读取配置文件后重启进程
9 SIGKILL:用来理解结束程序的运行,本信号不能被阻塞、处理和忽略。一般用于强制终止进程

2. kill -1 PID 和 kill -9 PID

分别用来重启线程和杀死线程

3. killall [选项][信号] 进程名字

按照进程名字杀死一类进程
选项
-i:交互后杀死进程
-I:忽略进程名的大小写

[root@VM_0_17_centos ~]# ps aux | grep httpd
root      4227  0.0  0.1 177472  3836 ?        Ss   19:46   0:00 /usr/sbin/httpd
apache    4229  0.0  0.1 177472  2472 ?        S    19:46   0:00 /usr/sbin/httpd
apache    4230  0.0  0.1 177472  2472 ?        S    19:46   0:00 /usr/sbin/httpd
apache    4231  0.0  0.1 177472  2496 ?        S    19:46   0:00 /usr/sbin/httpd
apache    4232  0.0  0.1 177472  2472 ?        S    19:46   0:00 /usr/sbin/httpd
apache    4233  0.0  0.1 177472  2472 ?        S    19:46   0:00 /usr/sbin/httpd
apache    4234  0.0  0.1 177472  2472 ?        S    19:46   0:00 /usr/sbin/httpd
apache    4235  0.0  0.1 177472  2472 ?        S    19:46   0:00 /usr/sbin/httpd
apache    4236  0.0  0.1 177472  2472 ?        S    19:46   0:00 /usr/sbin/httpd
root      4649  0.0  0.0 103332   840 pts/0    S+   19:49   0:00 grep httpd
[root@VM_0_17_centos ~]# killall -9 httpd
[root@VM_0_17_centos ~]# ps aux | grep httpd
root      4716  0.0  0.0 103332   840 pts/0    S+   19:50   0:00 grep httpd

4. pkill [选项][信号] 进程名字

选项
-t:按照终端号踢出用户

[root@VM_0_17_centos ~]# w
 19:52:48 up 1 day,  3:53,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    125.34.190.79    18:12    0.00s  0.04s  0.00s w
user1    pts/1    125.34.190.79    19:52   26.00s  0.00s  0.00s -bash
[root@VM_0_17_centos ~]# pkill -9 -t pts/1
[root@VM_0_17_centos ~]# w
 19:53:00 up 1 day,  3:53,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    125.34.190.79    18:12    0.00s  0.04s  0.00s w
[root@VM_0_17_centos ~]# 

五、进程优先级管理-nice命令

未完待续

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!