Linux 进程管理

进程管理

概念

进程

程序的一次执行过程

资源分配和管理的基本单位

进程管理的内容

  1. 监视进程:获取当前系统中各个进程的具体状态信息

  2. 调整进程运行优先级

  3. 守护进程

与进程有关的信息

  • PID (Process ID) 进程号

  • PPID (Parent ID) 父进程的 PID 号

  • USER/UID 执行该进程的用户名及其 uid

  • UID TTY 启动该进程的终端

  • PRI(priority) 进程的优先级,数字越大表示优先级越低

  • NICE 进程的谦让度,表示进程对 CPU 时间要求的迫切程度

  • %CPU 进程占用的 CPU 比例

  • %MEM 进程占用的内存比例

  • TIME 进程实际占用 CPU 的总时间

  • STIME 进程开始执行的时间

  • ADDR 进程在内存中的地址

  • RSS: 进程占用的内存大小 (KB)

  • VSZ 进程占用的虚拟内存空间

  • CMD 启动进程的命令

  • STAT (state,可用 S 表示) 进程的状态

    • S 睡眠状态

    • Z 僵尸状态

    • W 进程没有驻留页(等待)

    • D 不间断睡眠(挂起)

    • R 运行或者准备运行状态

    • T 停止或者追踪

    • I 空闲

    • N 低优先级的任务

Linux 系统中部分常用的信号

http://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20210620210657712.png

进程的优先级(PRI)

进程的优先级 PRI(priority)是操作系统在进程调度时用于判决进程是否能够获得 CPU 的依据之一

  • 进程的优先级越高,则越能在竞争中胜出而获得 CPU 时间

  • 以一个整数来表达的,数值越低,优先级越高

  • 每个普通进程的优先级默认为 80

进程的谦让度(NICE)

进程的谦让度(NICE)表示进程对 CPU 时间要求的迫切程度。

  • 取值范围为-20~19

  • 进程的谦让度为负数时,反映进程对 CPU 资源的要求较为迫切。

  • 一般来说:优先级 (PRI) 与谦让度 (NICE) 存在如下的关系: PRI (new) = PRI (old) + NICE

  • root 用户可以调整自己和其他用户的进程的 nice 值,且范围为-20~19;

  • 普通用户只能调整自己进程的 nice 值,为了避免普通用户抢占系统资源, nice 的调整范围为 0~19,而且只能往高调整

进程类型

  • 系统进程 : 操作系统启动后,系统环境平台运行所加载的进程。

  • 用户进程:与终端相关联,是由用户所执行的进程。

  • 守护进程:在后台运行的进程,有时也称为服务。它没有屏幕提示,只是在 后台等待用户或系统的请求

Linux 系统中的部分系统服务及其守护进程

http://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20210620210715948.png

进程监视命令

ps (process status) 命令

  • 功能:报告进程的相关信息

  • 格式:ps [选项]

  • 选项

    • -l 以长格式显示进程信息
    • -e 显示所有进程的信息(包含系统进程)
    • -a 显示所有用户进程
    • -x 显示没有控制终端的进程
    • -u 显示用户名和启动时间等信息
1
2
3
ps –el
ps -aux
ps -aux --sort -pid 按 pid 排序

top 命令

  • 功能:以实时的方式报告进程的相关信息

  • 格式:top [选项]

  • 选项

    • -d 10 设定刷新进程信息的间隔时间(秒)

pstree 命令

  • 功能:显示进程家族树的信息

  • 格式:pstree [选项] [进程 PID/用户名]

选项

  • -p 显示每个进程的 PID 号

  • -u 用户名 指定只显示属于该用户的进程

lsof (list open files) 命令

  • 功能:列出由某进程所打开的文件

  • 格式:lsof [选项] [文件或目录路径]

  • 选项

    • -p PID 列出由该进程所打开的所有文件

    • -u 用户名 列出某用户打开的所有文件

kill 命令

  • 功能:向特定进程发送某种信号

  • 格式:kill [选项] [-信号名称/编号] [PID 列表]

  • 选项

    • -l 列出系统中定义的信号

http://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20210620211206402.png

进程优先级命令

nice 命令

  • 功能:设定要启动的进程的谦让度

  • 格式:nice [选项] 命令

  • 选项

    • -n(nice) 数值 :设定谦让度,数值的范围 -20 ~ 19
  • 实例

1
2
3
4
# 以 root 身份登陆系统,来给将启动的 vi 进程设定谦让度为-3 
nice –n -3 vi& 

ps –l  

renice 命令

  • 功能:调整已存在进程的 nice 值

  • 格式:renice -n 谦让度 进程 pid 号

  • 实例

1
2
3
# 将上一个例子中的 vi 进程的谦让度调整为 3 
renice -n 3 <进程 pid 号> 
ps –l 

系统服务管理命令

runlevel 命令

  • 功能:用于显示系统当前的和上一次的运行级别。如系统不存在上一次的运行级别,用 N 来代替

  • 格式:runlevel

init 命令

  • 功能:转换服务的运行级别。

  • 格式:init[n],其中格式中的 n 为 0~6 的级别,转换级别后系统立刻生效。

1
2
3
4
5
init 3 #切换到第 3 运行级 
runlevel 
init 0   #关机 
init 6   #重新启动 
init 5   #进入图形界面 

systemctl 系统服务管理

查看系统服务启动状态。

1
2
# 列出所有服务,并且检查是否开机启动。
systemctl list-unit-files --type service        

实例:搜索指定的服务 (crond) 在系统中是否开机启动。

1
systemctl list -unit-files --type service|grep crond 

列出所有处于激活状态的服务

1
systemctl list-units --type service --all 
  • UNIT:服务名

  • LOAD:服务是否已经被加载

  • ACTIVE:服务活动状态

  • SUB:服务进程状态

  • DESCRIPTION:服务的描述

服务状态控制

1
systemctl [status/start/stop/restart/reload] name.service

实例

1
2
3
4
5
systemctl status crond.service # 查看 crond.service 服务状态 

systemctl stop crond.service # 关闭 crond.service 服务 

systemctl start crond.service # 开启 crond.service 服务

服务开机自启控制

1
systemctl [enable/disable] name.service 

实例

1
2
3
4
5
# 设置 crond.service 服务为开机自动启动。
systemctl enable crond.service 

# 搜索 crond 服务在系统中是否开机启动
systemctl list -unit-files --type service|grep crond

版本迭代差异

Centos7/RHEL7 版本:

  1. systemd 进程 取代 init 进程;

  2. init 进程的配置文件/etc/inittab 保留,但内容改变,原来的功能也不再使用

http://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20210620211504021.png

http://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20210620211531167.png

  1. targets 取代 runlevels
    1. 获得默认启动的 target: systemctl get-default
    2. 设置系统默认启动的 target: systemctl set-default
      • systemctl set-default multi-user.target 修改为多用户字符状态
      • systemctl set-default graphical.target 修改为图形界面
    3. centos7 仍然保留使用静态的运行级别来构建不同的启动状态

信号

TODO:https://www.cnblogs.com/zhaokunhao/p/14573716.html