Linux进程管理
进程概述
一个进程是一条命令运行的实例,如一个vi的命令同时被15个不同的用户打开,那么就会创建15个进程,进程通过ID进行识别,进程ID对当前系统来说是唯一的,进程会与一个特定的用户账号和组关联,账号信息可以帮助进程获取指定的系统资源权限
Linux的进程在 /proc 目录下,存在于以进程ID命名的文件夹中,如下图,蓝色的部分表示进程ID

列出进程
ps命令
ps 是最早也是最常用的列出当前系统进程的命令
常用的ps命令
ps u
显示进程的同时,以用户角度查看进程的使用资源情况VSZ(Virtual Set Size)
虚拟内存大小,以KB为单位RSS(Resident Set Size)
实际内存大小STAT
中R
表示睡眠进程,S
表示正在运行,+
表示前台操作ps ux | less
查看系统当前用户的所有进程,| less
是管道处理,分页显示结果ps -e
列出运行中的进程
我们还可以自定义显示的列,或者按照某列排序ps -eo pid,user,group,gid,vsz,rss,comm | less
o选项后面代表指定列ps -eo pid,user,group,gid,vsz,rss,comm --sort=-rss
sort代表排序,按照-rss
代表按照内存使用排倒序
top命令
top 提供了一种面向屏幕的方法来显示系统中运行的进程,在使用top时,默认按照进程当前所使用的CPU时间来显示进程,也可以设置为其它排序
当发现一个进程为不适当的进程,可以使用top来完全终止进程活改变进程优先级

top命令的一些操作
单击h,查看帮助文件,再按任意键返回
单击M,以内存占用排序,
单击P,以CPU占用排序
单击数字1,切换显示所有CPU的使用情况
单击R,对输出进行反向排序
单击u,并输入用户名,显示某用户的进程
单击r,然后输入进程P1D,改变进程的优先级,优先级取值为-19~20
单击k,杀死进程,输入进程PID,再输入15表示彻底终止该进程
管理前台和后台进程
在Linux的SHELL中,无法快捷的进行进程的切换,因为SHELL中没有像任务栏一样的进程切换工具,SHELL能做的是在后台和前台之间切换当前活动的进程
直接在命令后面加一个 &
符号就可以把命令放到后台,比如 find /usr > /tmp/1.txt &
通过jobs
命令查看后台进程

使用 fg
命令可以恢复进程到前台,比如 fg % 1
其中1 为工作号 如果不写 % 1
那么 fg
命令会把带有 +
号的工作恢复到前台
关闭和修改进程
关闭进程
Linux对进程的操作依赖进程间的信号来实现,通常信号是由一个系统错误产生,当然也可以人为发送信号,常用的信号如下
信号名 | 数字 | 说明 |
---|---|---|
SIGHUP | 1 | 由一个非链接状态的终端发送给控制进程,或者控制进程在自身结束时发给前台进程 |
SIGINT | 2 | 一般是由ctrl+C发起的中断 |
SINGKILL | 9 | 一般用于SHELL中强制终止异常进程 |
SIGTERM | 15 | 通常是一个结束请求,如关机时发送给进程,kill命令也默认发送这个信号 |
比如我们要关闭一个PID为8888的进程可以执行下面的操作
1 | kill 8888 kill默认发送15信号 |
使用killall
命令,可以根据进程名发送信号,而不需要查看进程ID,这样的有点是可以方便的杀死进程,但是也有可能误杀其他进程,比如 killall bash
除了会杀掉bash,还会杀掉所有的shell脚本,使用killall
时,同样可以使用信号数字
修改进程优先级
修改进程CPU使用优先级,Linux使用nice值定义进程访问CPU的优先级,top
命令的NI
列指向的就是CPU优先级

nice的值可以在-20~19之间,默认取值为0
- nice值越低,进程就有更多访问CPU的机会,优先级越高
- 普通用户只能将自己的进程nice设为 0~19
- 普通用户只能将nice值越设越高
- 普通用户只能在自己进程上设置nice
使用下面的命令来修改nice值
nice -5 vim &
将vim进程放在后台运行且设置nice值为 5renice -n -5 8888
renice 对正在运行的进程修改nice值,这个命令的意思是对进程ID为8888的进程nice值减5
守护进程
守护进程(init或systemd) ,可以理解为所有“进程之母”,是所有进程的起源,进程由他调度,守护进程是Linux内核中的第一个进程,通常名称为 init
或 systemd
,Linux内核中有一个PID为0的进程表示内核,守护进程PID为1
服务管理
Linux 服务管理有两个命令
service
systemctl
service
命令的本质是指向/etc/init.d
目录下的脚本
systemctl
命令是linux系统最新的初始化系统,同时 systemctl
也兼容了 service
命令,也会查找/etc/init.d
目录
systemctl常用方法如下:
systemctl start|stop|restart service
启动停止重启服务systemctl enable|disable service
开机启动开机不启动服务systemctl status service
查看服务的状态systemctl is-active service
查看服务是否启动systemctl is-enabled service
查看服务是否开机启动