Linux 进程管理


Linux 进程管理

一、进程介绍

正在运行的程序的实例称为进程。每次运行 shell 命令时,都会运行一个程序并为其创建一个进程。Linux 中的每个进程都有一个进程 ID(PID),它与特定的用户和组帐户相关联。
Linux 是一个多任务操作系统,这意味着可以同时运行多个程序(进程也称为任务),这些任务共享公共处理资源(如 CPU 和内存)。

二、进程类型

在 Linux 中,进程可以有两种类型:

  • 前台进程

依赖于用户的输入,也称为交互进程

  • 后台进程

独立于用户运行,称为非交互式或自动进程

三、进程状态

Linux 中的进程在创建之后和终止之前可以经历不同的状态,这些状态是:

procfs 进程状态 说明
R(runnng) TASK_RUNNING 可运行状态。未必正在使用 CPU,也许是在等待调度
S(sleeping) TASK_INTERRUPTIBLE 可中断的睡眠状态。正在等待某个条件满足
D(disk sleeping) TASK_UNINTERRUPTIBLE 不可中断的睡眠状态。不会被信号中断
T(stopped) __TASK_STOPPED 暂停状态。收到某种信号,运行被停止
t(tracing stop) __TASK_TRACED 被跟踪状态。进程停止,被另一个进程跟踪
Z(zombie) EXIT_ZOMBIE 僵尸状态。进程已经退出,但尚未被父进程或者 init 进程收尸
X(dead) EXIT_DEAD 真正的死亡状态

进程的状态流转过程如下:
image.png

四、进程属性

属性 介绍
PID 进程的 ID 号
PPID 父进程(产生当前进程的进程)的 PID
UID(RUID) 启动进程的用户 ID
EUID 有效用户 ID,一种确定对系统资源的访问权限
GID(RGID) 启动进程的用户所属的组
EGID 有效组所有者,不同于 RGID, SGID 应用于文件
状态 R - 运行,W - 就绪,S - 休眠,Z - 僵尸
优先级 进程执行的优先级
TTY 进程连接到的终端

五、ps 查看进程

命令介绍

ps 命令是“Process Status”的缩写,它显示当前正在运行的进程。但是,它与 top 命令不同,生成的输出不是实时的。
ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
语法格式:ps [参数]

下表描述了通常出现在 ps 输出中的列的含义:

列标题 解释
%CPU 进程使用了多少 CPU
%MEM 进程使用了多少内存
ADDR 进程的内存地址
C 或 CP CPU 使用率和调度信息
COMMAND* 进程的名称,包括参数,如果有的话
NI nice 价值
F 旗帜
PID 进程标识号
PPID 进程的父进程的 ID 号
PRI 进程的优先级
RSS 实际内存使用
S 或 STAT 进程状态码
START 或 STIME 进程开始的时间
SZ 虚拟内存使用
TIME 总 CPU 使用率
TT 或 TTY 与进程关联的终端
UID 或 USER 进程所有者的用户名
WCHAN 进程正在等待的事件的内存地址

常用参数

参数 说明
a 显示跟当前终端关联的所有进程
u 基于用户的格式显示
x 显示所有进程,不以终端机来区分
-e 显示所有进程
-f 以完整格式输出

用例

以 BSD 格式显示所有进程

ps -aux

查看完整格式的所有进程

ps -ef

显示指定用户信息

ps -u root

按 CPU 资源的使用量进行排序

ps aux | sort -nk 3

按内存资源的使用量进行排序

ps aux | sort -rnk 4

查看进程 PID

ps -C process_name

将 ps 命令与 grep 一起使用

ps -ef | grep systemd

六、uptime 查看系统负载

介绍

Linux 系统中的 uptime 命令主要用于获取主机运行时间和查询 Linux 系统负载等信息。
uptime 命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登录用户、系统在过去的 1 分钟、5 分钟和 15 分钟内的平均负载。 uptime 命令用法十分简单,直接输入 uptime 即可查看系统负载情况。

语法格式:uptime [参数]

常用参数

参数 说明
-p 以漂亮的格式显示机器正常运行的时间
-s 系统自开始运行时间,格式为 yyyy-mm-dd hh:mm:ss
-h 显示帮助信息

用例

显示当前系统运行负载情况

uptime

显示机器正常运行的时间

uptime -p

显示机器启动时间

uptime -s

七、top 实时显示进程动态

介绍

top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。
在 top 命令中按 f 按可以查看显示的列信息,按对应字母来开启/关闭列,大写字母表示开启,小写字母表示关闭。带*号的是默认列。

语法格式:top [参数]

常用参数

参数 说明
-d 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
-q 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
-c 切换显示模式
-s 安全模式,将交谈式指令取消, 避免潜在的危机
-i 不显示任何闲置 (idle) 或无用 (zombie) 的行程
-n 更新的次数,完成后将会退出 top
-b 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内

top 快捷键

  • s:修改刷新时间,默认 3s 刷新一次
  • 空格键:立即刷新
  • q:退出
  • P:按 CPU 排序
  • M:按内存排序
  • T:按时间排序
  • p:进程 IP,查看某个进程状态
  • 1:显示每个内核的 CPU 使用率
  • u/U:指定显示的用户
  • h:帮助

用例

显示进程信息

top

显示完整的进程信息

top -c

以批处理模式显示程序信息

top -b

以累积模式显示程序信息

top -s

设置信息更新次数

top -n 2

八、lsof 查进程打开的文件

介绍

lsof 命令用于查看进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP),找回/恢复删除的文件。是十分方便的系统监视工具,因为 lsof 命令需要访问核心内存和各种文件,所以需要 root 用户执行。

语法格式:lsof [参数] [文件]

安装

apt install lsof
# 或
yum install lsof

常用参数

参数 说明
-a 列出打开文件存在的进程
-c <进程名> 列出指定进程所打开的文件
-g 列出 GID 号进程详情
-d <文件号> 列出占用该文件号的进程
+d <目录> 列出目录下被打开的文件
+D <目录> 递归列出目录下被打开的文件
-n <目录> 列出使用 NFS 的文件
-i <条件> 列出符合条件的进程
-p <进程号> 列出指定进程号所打开的文件
-u 列出 UID 号进程详情
-h 显示帮助信息
-v 显示版本信息

用例

查看文件的进程信息

lsof

列出 GID 号进程详情

lsof -g

列出目录下被打开的文件

lsof +d /root

特定用户打开的文件

sudo lsof -u root | less

列出特定进程打开的文件

lsof -p <PID>

列出打开的网络文件

lsof -i

根据命令查找打开的文件

lsof -c <COMMAND>

九、前后台进程切换

Linux 任务的前后台管理

十、kill 关闭进程

介绍

kill 正如这个单词的意思一样,就是杀死,linux 系统中 kill 命令用来删除执行中的程序或工作。
kill 命令可将指定的信号发送给相应的进程或工作。 kill 命令默认使用信号为 15,用于结束进程或工作。如果进程或工作忽略此信号,则可以使用信号 9,强制杀死进程或作业。

语法格式:kill [参数] [进程号]

kill 命令的进程终止信号

选项 信号编号 行动
SIGTERM 15 SIGTERM 信号用于告诉进程正常结束。该终止信号可能会被进程解释,也可能会被忽略。
SIGKILL 9 SIGKILL 信号用于强制终止进程。这是一个无论如何都不能被进程忽略的信号。
​SIGHUP 1 SIGHUP 信号用于“挂断”进程。这可用于重新启动进程。
SIGINT 2 当用户想要中断进程时使用 SIGINT 信号。

常用参数

参数 说明
-l 列出系统支持的信号
-s 指定向进程发送的信号
-a 处理当前进程时不限制命令名和进程号的对应关系
-p 指定 kill 命令只打印相关进程的进程号,而不发送任何信号
-l 列出系统支持的信号

用例

列出系统支持的信号列表

kill -l

kill 杀掉指定 pid 的进程

kill [PID]

根据进程名称杀掉相关进程

killall httpd

强制关闭进程

kill -9 [PID]

文章作者: Truda
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Truda !
评论
  目录