何谓进程?进程,就是正在执行的一个程序或命令,每一个进程都是一个运行实体,有自己的地址空间,并占用一定的系统资源。简而言之,进程就是运行中的程序。在Linux中,诸如ls等命令都是进程,只不过某些命令进程在运行完后立即关闭了。而像apache等常驻内存服务也会产生进程,例如,一个用户访问一个apache下的站点,必定会产生一个进程。Linux中有各种各样的进程,尤其是在服务器中,我们需要实时了解系统中所有进程的状态,因此本篇文章将针对进程的管理进行详细地讲解。
在具体讲解进程管理前,我们先讨论一下进程管理的作用。总的来说,进程管理具有如下三个作用:
- 判断服务器健康状态:这是进程管理中最主要的作用,通过分析进程的状态(内存、CPU占有率等)判断服务器的负载和安全状态。
- 查看系统中的所有进程:这是进程管理的基础,通过查看系统中的所有进程状态才能决定对进程作出什么样的管理。
- 杀死进程:进程管理中的辅助手段,杀死进程只是迫不得已的做法,一般情况下,进程都有正常的退出方法,只有进程不能正常结束时,才使用杀死进程的方法。
在了解了进程管理的作用后,我们来看进程查看命令的使用。进程查看命令主要有ps、pstree、top三个命令,下面我们逐一讲解。
- ps命令
命令选项:
- -a :显示一个终端所有的进程
- -u:显示进程的归属用户和内存占用情况
- -x:显示没有控制终端的进程
- -l:长格式显示更详细的信息
- -e:显示所有进程
命令组合:总的来说,ps命令具有两种组合格式,一种是ps aux,一种是ps -le。
- ps aux:查看系统中的所有进程,使用BSD操作系统格式
注:ps aux和ps -aux命令有区别,在ubuntu中ps -aux不会报错,而在centos中,ps -aux会提示警告信息。使用man ps可以查看文档描述,但是在使用过程中不必纠结于二者的区别。
- ps -le:查看系统中的所有进程,使用Linux标准格式
在实际使用过程中,我们没有必要对ps命令输出的所有进程都认识,应该关注的是每一列输出信息代表的含义是什么。下面以ps aux为例,讲解对应列的含义:
- USER:产生该进程的用户。
- PID:进程的ID。
- %CPU:该进程占用的CPU资源百分比。
- %MEM:该进程占用物理内存百分比。
- VSZ:该进程占用虚拟内存的大小,单位KB。
- RSS:该进程占用的实际物理内存大小,单位KB。
- TTY:该进程是在哪个中断运行的,其中tty1-tty7代表本地控制终端,tty1-tty6为字符终端,tty7为图形终端。pts/0-255代表虚拟终端。
- STAT:进程状态。常见状态有:
- R:运行
- S(大写):睡眠
- T:停止状态
- s(小写):包含子进程
- +:后台进程
- START:该进程的启动时间。
- TIME:该进程占用CPU的运算时间。
- COMMAND:进程名
(注:PID等于1的进程 /sbin/init 是系统的启动进程,是系统中所有进程的父进程)
2.pstree命令产看进程树
命令选项:
- -p:显示进程的PID
- -u:显示进程的所属用户
直接使用pstree命令,输出的是系统的进程树,其中相同名称的进程使用数字*进程名的形式输出,使用pstree -p命令可以将不同PID的进程展开:
3.top命令查看进程状态
命令选项:
- -d 秒数:指定top命令每隔几秒更新,默认是3秒。
- -b:使用批处理模式输出,一般和-n合用。
- -n 次数:指定top命令执行的次数。
top命令交互模式下的命令:
- ?或h:显示交互模式的帮助文档。
- p:以CPU使用率排序,默认方式。
- M:以内存使用率排序。
- N:以PID排序
- q:退出top命令交互模式
一般的,在终端输入top命令即进入了top交互模式:
此时可以键入交互模式下的命令对输出进行不同的排序。在top命令下,我们重点关注最上面五行系统信息:
- 11:31:20 :系统当前时间,默认每3秒更新。
- up 113days,16:20 :系统已运行113天16个小时20分钟。
- 3 users:当前登录了3个用户。
- load average:0.00,0.00,0.00 :系统在之前1分钟,5分钟,15分钟的平均负载,一般认为对于每一个CPU核心,该数值小于1时系统负载较小,大于1时系统负载较大。
- Tasks:112total :系统中的进程总数。
- 2 running:正在运行的进程数。
- 110 sleeping:睡眠进程数。
- 0 stopped:正在停止的进程。
- 0 zombie:僵尸进程。
- Cpu(s):0.3%us :用户模式占用的cpu百分比。
- 0.3%sy:系统模式占用的cpu百分比。
- 0.0%sy:改变过优先级的用户进程占用百分比。
- 99.3%id:空闲cpu的百分比。
- 0.0%wa:等待输入/输出的进程占用cpu百分比。
- 0.0%hi:硬中断请求服务占用cpu百分比。
- 0.0%si:软中断请求服务占用cpu百分比。
- 0.0%st:虚拟时间百分比。
- 第四行为物理内存的信息,第五行为交换分区的信息,单位为kb,注意buffers是用作缓冲的内存大小,cached是用作缓存的内存大小。
4.kill命令终止进程
- kill -l(字母l):查看所有信号。
其中,重点关注kill -1(数字1)和kill -9。kill -1用于重启进程(而不是杀死),不影响现有进程的使用,一般在修改某种服务的配置文件之后使用该命令;kill -9用于强制终止进程,基本格式为 kill [数字]进程PID。
- killall命令:基本格式为killall [选项][信号]进程名。killall的选项有-i和-I,-i用于交互,询问是否杀死某个进程,-I用于忽略进程名的大小写。
- pkill命令:基本格式为pkil [选项][信号]进程名 。选项-t 终端号 用于按照终端号踢出用户。
首先使用w命令查看当前用户,可以见到共有四个远程用户终端,当前正在使用的终端为pts/4,因为其正在使用w命令。接着用pkill命令踢出pts/0,再次用w命令查看,可见此时pts/0用户已被踢出。
5.优先级修改nice命令:基本格式为nice -n 数值 进程名。在前面ps -le命令中,表示优先级的列有PRI(priority)和NI(nice),真正的优先级由PRI决定,数值越小优先级越高。用户只能修改NI的值,修改后的PRI=原PRI+NI。下图为修改apache服务进程的优先级示例。由于优先级对日常使用无很大影响,此处不加赘述,有兴趣的可以自行查阅相关资料。