Linux进程管理
概要
本文围绕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命令
未完待续
来源:CSDN
作者:欧阳文轩
链接:https://blog.csdn.net/weixin_39670733/article/details/104346670