Linux进程管理
进程管理
进程简介
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
其实进程就是表示正在运行的程序,有些进程可能很快,一执行就消失了,比如执行 ls 命令。有些进程会常驻在内存中,比如系统对外提供的Apache服务。在linux中,所以可执行的程序都能产生至少一个进程,有些程序可能产生多个进程。
进程管理作用
- 判断服务器健康状态
- 查看系统中所有进程
- 杀死进程
很多习惯用windows的小伙伴可能会觉得进程管理最主要就是可以用来杀死进程,其实不然。在服务器管理中,进程管理主要是用来判断服务器的健康状态的,在系统还未死机但是CPU和内存占有率很高的情况下人为介入将异常状态处理掉,让服务器恢复正常状态。
进程查看命令-ps
ps aux
查看系统中所有进程,使用BSD操作系统格式
ps -le / ps -ef
查看系统中所有进程,使用Linux标准命令格式/全格式
常用选项
![](https://img.haomeiwen.com/i14795543/2b65fe8881ca74d1.png)
ps命令输出
注意:init进程的PID固定为1,是系统当中启动的第一个进程,是所有进程的父进程
![](https://img.haomeiwen.com/i14795543/8994b78cade6b23e.png)
stat输出列
stat代表进程状态,常见的状态有如下一些:
![](https://img.haomeiwen.com/i14795543/d4eafaef68397a5a.png)
ps命令演示
![](https://img.haomeiwen.com/i14795543/a821b81f280e3018.png)
查看进程树-pstree
pstree [选项]
-p:
显示进程的PID(显示所有子进程)
-u:
显示进程的所属用户
![](https://img.haomeiwen.com/i14795543/1a0fe57157cadc3c.png)
进程查看命令-top
top是一个查看系统健康状态命令,可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具,top命令默认每三秒会刷新一次,默认按照CPU占有率进行排序显示。
top的常用选项,以及在top命令的交互模式当中可以执行的命令如下
![](https://img.haomeiwen.com/i14795543/6c861b012764b3ff.png)
top命令演示
top命令的输出结果我们重点关注前5行信息,后面的进程相关信息和ps命令是差不多的
![](https://img.haomeiwen.com/i14795543/d2293542e9aa1474.png)
top输出内容第一行:任务队列信息
这里说一下不是系统的运行时间越长就越好,有计划的重启,是维护服务器的基本原则。服务器运行时间过长,出现故障的可能性就会越大。
![](https://img.haomeiwen.com/i14795543/67d4b06be41d9e5e.png)
top输出内容第二行:进程信息
![](https://img.haomeiwen.com/i14795543/3cd67b18bff3e9c4.png)
top输出内容第三行:CPU信息
![](https://img.haomeiwen.com/i14795543/0134c6f228953b68.png)
top输出内容第四行:物理内存信息
![](https://img.haomeiwen.com/i14795543/e28a25f30c94682c.png)
top输出内容第五行:交换分区(swap)信息
![](https://img.haomeiwen.com/i14795543/c517072b5ff52728.png)
使用说明
- top命令通常看的参数为load average,cpu空闲率,内存空闲率,swap空闲率
- top命令比较占用系统资源,如果不使用必须及时退出
-
top -b -n 1 > /root/top.log
#执行top命令一次并写入文件,可以看到所有进程情况
杀死进程
kill命令
语法:kill [信号] 进程ID(PID)
kill -1 进程ID
#重启进程(平滑重启)
kill -9 进程ID
#强制杀死进程
进程信号
kill -l
#查看可用的进程信号
![](https://img.haomeiwen.com/i14795543/f2b76483450eed20.png)
killall命令
killall [选项][信号] 进程名
#按照进程名杀死进程
选项:
-i:
交互式,询问是否要杀死某个进程
-I:
忽略进程名的大小写
killall -9 httpd
#杀死所有的apache进程
killall -i -9 httpd
#每杀死一个进程询问一次,按y同意
pkill命令
pkill [选项][信号] 进程名
#按照进程名终止进程
-t 终端号:
按照终端号踢出用户(只有超级用户可以剔除其它用户)
pkill -9 -t pts/1
#强制杀死从pts/1虚拟终端登录的进程
建议踢除其他用户前先使用w命令查询本机已经登录的用户,避免误踢
![](https://img.haomeiwen.com/i14795543/5f378492ae98b642.png)
修改进程优先级
Linux操作系统是一个多用户、多任务的操作系统,Linux系统中通常运行着非常多的进程。但是CPU在同一个时钟周期内只能运算一个指令,进程优先级决定了每个进程处理的先后顺序。
其实优先级管理对于一般的系统管理来讲是基本用不到,只需要了解即可,如果是做内核编程相关优先级就相对比较重要了。
查看优先级
ps -le
#可以显示所有进程的优先级
PRI代表Priority,NI代表Nice。这两个值都是优先级,数字越小代表该进程优先级越高
![](https://img.haomeiwen.com/i14795543/b015e20ff27a7794.png)
修改NI值注意事项
- NI的值的范围是-20到19
- 普通用户调整NI值的范围是0到19,而且只能调整自己的进程
- 普通用户只能调高NI值,而不能降低,如原本NI值为0,则只能调整为大于0
- root用户才能设定进程NI值为负值,而且可以调整任何用户的进程
- PRI(最终值) = PRI(原始值) + NI
- 用户只能修改NI的值,不能直接修改PRI
nice命令
nice [选项] 命令
#nice命令可以给新执行的命令直接赋予NI值,但是不能修改已经存在进程的NI值
-n NI值:
给命令赋予NI值
nice -n -5 service httpd start
#启动Apache服务并修改其NI值为-5
renice命令
renice [优先级] PID
#renice命令是修改已经存在进程的NI值的命令
例如:renice -10 2125