Linux 进程管理核心概念与操作指南
进程是程序在操作系统中的一次执行过程,是系统进行“资源分配和调度”的基本单位。它包含了程序执行所需的各种资源,如内存空间、文件描述符等。每个进程都有自己独立的内存空间和系统资源,不同进程之间相互隔离。程序是静态的代码文件。进程是程序运行时的动态形态,是程序的一个副本。进程拥有完整的生命周期:准备期、运行期、终止期。线程是进程中的一个执行单元,是CPU 调度和分派的基本单位。一个进程可以包含多个线程
1. 进程与线程:基础概念
1.1 什么是进程?
进程是程序在操作系统中的一次执行过程,是系统进行“资源分配和调度”的基本单位。它包含了程序执行所需的各种资源,如内存空间、文件描述符等。每个进程都有自己独立的内存空间和系统资源,不同进程之间相互隔离。
关键点:
- 程序是静态的代码文件。
- 进程是程序运行时的动态形态,是程序的一个副本。
- 进程拥有完整的生命周期:准备期、运行期、终止期。
1.2 什么是线程?
线程是进程中的一个执行单元,是 CPU 调度和分派的基本单位。
- 一个进程可以包含多个线程。
- 这些线程共享进程的内存空间和系统资源。
- 每个线程有自己独立的栈空间和程序计数器。
- 线程之间可以并发执行,提高程序的执行效率。
- 在多核 CPU 系统中,每个核心处理的任务单元就是线程。
2. 进程状态详解
Linux 进程有以下几种核心状态,可通过 ps 或 top 命令的 STAT 列查看:
| 状态码 | 内核宏定义 | 含义 |
|---|---|---|
| R | TASK_RUNNING |
可执行态(正在运行或在运行队列中等待) |
| S | TASK_INTERRUPTIBLE |
可中断的睡眠状态(等待事件完成,可被信号唤醒) |
| D | TASK_UNINTERRUPTIBLE |
不可中断的睡眠状态(通常等待硬件 I/O,不能被信号唤醒) |
| T | TASK_STOPPED |
暂停状态(进程被信号暂停,如 SIGSTOP) |
| Z | TASK_ZOMBIE |
僵死态(进程已终止,但父进程尚未回收其资源) |
状态字符补充说明(在 STAT 列可能伴随出现):
<:高优先级进程N:低优先级进程s:会话首进程(顶级进程)+:进程位于前台进程组
3. 进程查看方法
3.1 图形化工具
gnome-system-monitor
3.2 命令行工具详解
ps 命令
最常用的进程查看工具,有三种风格:UNIX、BSD、GNU。
常用组合:
ps ax # 显示所有进程(与终端相关+无关)
ps aux # BSD风格:显示所有进程的详细信息(用户、CPU、内存等)
ps -ef # UNIX风格:显示完整格式的所有进程
ps -ejH 或 ps axjf # 显示进程树(层级关系)
ps -o pid,comm,ni,pri,pcpu,ppid,stat,user,group # 显示指定字段
ps aux 输出字段说明:
- USER:进程所有者
- PID:进程ID
- %CPU:CPU使用百分比
- %MEM:内存使用百分比
- VSZ:虚拟内存大小 (KB)
- RSS:常驻内存大小 (KB)
- TTY:关联的终端
- STAT:进程状态(见第2节)
- START:进程启动时间
- TIME:累计占用CPU时间
- COMMAND:启动命令
pgrep 命令
根据条件过滤进程ID。
pgrep -u uid # 按用户ID查找
pgrep -U username # 按用户名查找
pgrep -t tty # 按终端查找
pgrep -l # 同时列出进程名
pgrep -a # 列出完整命令行
pidof 命令
根据进程名查找PID。
pidof vim
top 命令
动态实时查看系统进程和资源使用情况。
启动与常用内部指令:
top -d 5 # 每5秒刷新一次
top -b -n 2 # 以批次模式运行,输出2次后退出
top 运行时快捷键:
- P:按 CPU 使用率排序
- M:按内存使用率排序
- T:按累计 CPU 时间排序
- k:终止指定进程
- u:仅显示指定用户的进程
- s:更改刷新延迟(秒)
- q:退出
top 信息区解读:
load average: 0.75, 0.53, 0.41:系统1分钟、5分钟、15分钟的平均负载。%Cpu(s)::- us:用户空间占用CPU百分比
- sy:内核空间占用CPU百分比
- ni:调整过nice值的进程占用百分比
- id:空闲CPU百分比
- wa:等待I/O的CPU时间百分比
- hi/si:处理硬/软中断的时间百分比
- st:被虚拟机偷走的时间(虚拟化环境)
4. 进程的前后台调用
命令 &:直接在后台启动进程。<Ctrl>+<Z>:将当前前台进程挂起(暂停)并放入后台。jobs:查看当前Shell中的所有后台作业。fg [%作业号]:将后台作业调至前台运行。bg [%作业号]:将后台挂起的作业继续运行(仍在后台)。
5. 进程优先级管理
5.1 优先级范围
Linux 进程优先级范围是 0-139。
- 0-99:实时优先级(由内核控制,数值越高优先级越高)。
- 100-139:静态优先级(用户可控,对应 nice 值 -20 到 19)。

5.2 调整优先级
nice 值:-20(最高优先级)到 19(最低优先级)。
nice -n -5 command # 以高优先级(nice值为-5)启动新进程
renice -n -5 43331 # 更改已运行进程(PID 43331)的nice值为-5
```
同时,还有当开启进程时任何指定优先级,输入下方命令可以在开启的同时设定其优先级。
[root@localhost Desktop]# nice -n -5 firefox &
在 `top` 或 `ps` 中:
- **PR** 列:进程优先级(显示为内核视角的优先级数字)。
- **NI** 列:nice值(用户可调部分)。
## 6. 进程信号(Signal)的使用
信号是一种软件中断,用于进程间通信或控制进程行为。
### 6.1 常用信号
| 信号名称 | 信号编号 | 默认行为 | 描述与触发方式 |
| :--- | :--- | :--- | :--- |
| **SIGHUP** | 1 | 终止进程 | 终端断开连接时发送。常用于让守护进程重新加载配置。 |
| **SIGINT** | 2 | 终止进程 | 用户在终端按下 `Ctrl+C` 时发送给前台进程。 |
| **SIGQUIT** | 3 | 终止并生成核心转储 | 用户在终端按下 `Ctrl+\` 时发送。 |
| **SIGTERM** | 15 | 终止进程 | **默认的终止信号**,请求进程正常退出。 |
| **SIGKILL** | 9 | 强制终止进程 | **不可被捕获、阻塞或忽略**。用于强制杀死无响应的进程。 |
| **SIGSTOP** | 19 | 暂停进程 | **不可被捕获、阻塞或忽略**。暂停进程执行。 |
| **SIGCONT** | 18 | 继续执行 | 恢复被 `SIGSTOP` 暂停的进程。 |
### 6.2 信号控制工具示例
```bash
kill -9 1234 # 向PID 1234发送SIGKILL(9)信号
kill -SIGTERM 1234 # 向PID 1234发送SIGTERM(15)信号
killall -9 process_name # 按进程名批量发送SIGKILL信号
pkill -9 -u username # 按条件(如用户)发送信号


7. Systemd 守护进程管理
7.1 什么是守护进程?
守护进程(Daemon)是一种在后台持续运行、不与终端直接交互的特殊进程。通常在系统启动时自动运行,为系统提供各种服务(如Web服务器、日志服务)。
7.2 Systemd 简介
Systemd 是现代 Linux 系统的初始化系统和服务管理器,取代了传统的 SysVinit。
7.3 核心管理命令 systemctl
systemctl start servicename # 启动服务
systemctl stop servicename # 停止服务
systemctl restart servicename # 重启服务
systemctl reload servicename # 重新加载配置(不重启)
systemctl status servicename # 查看服务状态
systemctl enable servicename # 设置开机自启
systemctl enable --now servicename # 设置开机自启并立即启动
systemctl disable servicename # 禁用开机自启
systemctl mask servicename # 冻结服务(禁止启动)
systemctl unmask servicename # 解冻服务
systemctl list-units # 查看所有单元当前状态
systemctl list-unit-files # 查看所有单元的开机启动状态
systemctl list-dependencies servicename # 列出服务的依赖关系
systemctl set-default multi-user.target # 设置默认运行级别为无图形界面
systemctl set-default graphical.target # 设置默认运行级别为图形界面
systemctl get-default # 查看当前默认运行级别
7.4 系统运行级别(Target)
Systemd 使用 target 替代传统的运行级别:
- multi-user.target:无图形界面的多用户模式(对应传统级别 3)。
- graphical.target:图形界面的多用户模式(对应传统级别 5)。
- rescue.target:救援模式(单用户,对应传统级别 1)。
- poweroff.target / reboot.target:关机/重启。
9. 进程间通信(IPC)实战示例
进程间通信(IPC)是多个进程之间交换数据与同步操作的机制。
9.1 管道(Pipe)
管道是最简单的 IPC 方式,适用于有亲缘关系(如父子进程)的进程间通信。管道是单向的,数据从一端写入,从另一端读取。
9.2 消息队列(Message Queue)
消息队列允许进程通过消息链表进行通信,消息具有类型标识,支持不同进程间的异步通信。
9.3 共享内存(Shared Memory)
共享内存允许多个进程访问同一块内存区域,是速度最快的 IPC 方式,但需要进程自行处理同步问题。
9.4 IPC 方式对比
| IPC 方式 | 特点 | 适用场景 | 同步要求 |
|---|---|---|---|
| 管道 | 简单、单向、有亲缘关系 | 父子进程间简单通信 | 内核自动同步 |
| 消息队列 | 消息类型、异步、跨进程 | 需要消息分类的通信 | 内核提供队列同步 |
| 共享内存 | 最快、直接内存访问 | 大数据量、高性能通信 | 需进程自行同步(如信号量) |
8. 总结
Linux 进程管理是系统运维和开发的基础。掌握进程的状态、查看命令(ps, top)、控制方法(前后台、信号 kill)、优先级调整(nice, renice)以及现代服务管理工具(systemctl),能够帮助您有效地监控系统、优化性能、排查故障并确保关键服务的稳定运行。建议在实际环境中多加练习,将这些命令和概念融会贯通。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)