进程概述

一个进程是一条命令运行的实例,如一个vi的命令同时被15个不同的用户打开,那么就会创建15个进程,进程通过ID进行识别,进程ID对当前系统来说是唯一的,进程会与一个特定的用户账号和组关联,账号信息可以帮助进程获取指定的系统资源权限

Linux的进程在 /proc 目录下,存在于以进程ID命名的文件夹中,如下图,蓝色的部分表示进程ID

列出进程

ps命令

ps 是最早也是最常用的列出当前系统进程的命令

常用的ps命令

  1. ps u 显示进程的同时,以用户角度查看进程的使用资源情况
    VSZ(Virtual Set Size) 虚拟内存大小,以KB为单位
    RSS(Resident Set Size) 实际内存大小
    STATR 表示睡眠进程,S 表示正在运行,+表示前台操作

  2. ps ux | less 查看系统当前用户的所有进程,| less 是管道处理,分页显示结果

  3. 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
2
3
4
5
kill 8888           kill默认发送15信号
kill -15 8888 kil指定发送15信号
kill -SIGKILL 8888 kll指定发送9信号,即SIGKILL
kill -1 8888 kill指定发送1信号,类似于systemctlreload httpd,重新加载配置文件

使用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值

  1. nice -5 vim & 将vim进程放在后台运行且设置nice值为 5
  2. renice -n -5 8888 renice 对正在运行的进程修改nice值,这个命令的意思是对进程ID为8888的进程nice值减5

守护进程

守护进程(init或systemd) ,可以理解为所有“进程之母”,是所有进程的起源,进程由他调度,守护进程是Linux内核中的第一个进程,通常名称为 initsystemd,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 查看服务是否开机启动