wiki/运维/Linux/笔记/25.进程.md
2026-04-08 19:40:00 +08:00

206 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 1、进程概览
进程是程序的一次运行实例,是操作系统进行资源分配和调度的基本单位。
可以简单理解为:
- **程序**:静态文件
- **进程**:程序运行起来后的动态实体
## 2、进程的基本状态
常见运行状态包括:
- **创建状态**:进程刚被创建
- **就绪状态**:已准备运行,等待分配 CPU
- **运行状态**:正在执行
- **阻塞状态**:等待某些资源或事件,例如 I/O
- **终止状态**:执行结束或异常退出
在 Linux 中,`ps``top` 等命令里更常看到下面这些状态码:
- `R`Running运行中或在运行队列中
- `S`Sleeping可中断睡眠
- `D`Uninterruptible Sleep不可中断睡眠常见于 I/O 等待
- `T`Stopped被暂停或被调试
- `Z`Zombie僵尸进程
## 3、进程、线程、协程
### 3.1 线程
线程是进程中的执行流,是 CPU 调度的基本执行单位之一。一个进程可以包含多个线程。
### 3.2 协程
协程通常由用户态程序自己调度,切换开销更小,适合高并发编程场景。
在日常 Linux 运维里,最常关注的仍然是**进程**和**线程**。
## 4、进程类型
- **守护进程**:后台长期运行、通常不依赖终端,例如各种服务进程
- **前台进程**:与当前终端交互的进程
- **后台进程**:由当前 shell 启动但放到后台运行的进程
## 5、常用查看命令
### 5.1 `pstree`
用于查看进程树关系。
常见选项:
- `-p`:显示 PID
- `-T`:不显示线程
- `-u`:显示用户切换
- `-H`:高亮指定进程及其祖先进程
示例:
```shell
pstree -p
```
### 5.2 `ps`
用于查看进程快照。
常见选项:
- `a`:显示所有终端相关进程
- `x`:显示不依赖终端的进程
- `u`:显示用户信息
- `f`:树状显示父子关系
高频示例:
```shell
ps aux
ps -ef
ps auxf
```
### 5.3 `pidof` 与 `pgrep`
```shell
pidof nginx
pgrep nginx
```
适合快速查找某个进程的 PID。
### 5.4 `top` 与 `htop`
- `top`动态查看系统负载、CPU、内存、进程情况
- `htop`:更友好的交互式进程查看工具
### 5.5 `pmap`
```shell
pmap PID
```
用于查看进程内存映射。
### 5.6 `vmstat`
```shell
vmstat 1
```
用于观察系统整体运行情况,如 CPU、内存、上下文切换、I/O 等。
### 5.7 `iostat`
```shell
iostat
```
用于查看 CPU 和磁盘 I/O 情况,通常来自 `sysstat` 软件包。
### 5.8 `lsof`
```shell
lsof -p PID
```
用于查看某个进程打开了哪些文件、端口、套接字。
## 6、进程控制命令
### 6.1 `kill`
用于按 PID 发送信号。
```shell
kill PID
kill -9 PID
```
### 6.2 `pkill`
用于按进程名或条件杀进程。
```shell
pkill nginx
```
### 6.3 `nohup`
用于让命令在退出终端后继续运行。
```shell
nohup command &
```
### 6.4 `jobs`、`bg`、`fg`
这些命令用于 shell 作业控制:
- `jobs`:查看当前 shell 的作业
- `bg`:把任务放到后台继续执行
- `fg`:把后台任务切回前台
## 7、常见排障场景
### 7.1 查某个服务是否存在
```shell
ps -ef | grep nginx
pgrep nginx
```
### 7.2 查谁占用 CPU 高
```shell
top
htop
```
### 7.3 查进程打开了哪些文件
```shell
lsof -p PID
```
### 7.4 查进程内存映射
```shell
pmap PID
```
### 7.5 查僵尸进程
```shell
ps aux | grep ' Z '
```
## 8、小结
- 进程是资源分配和调度的核心对象
- `R``S``D``T``Z` 是最常见的进程状态
- `ps``pstree``top``htop``lsof` 是高频排障命令
- `kill``pkill``nohup``jobs``bg``fg` 常用于进程控制
- 排查问题时,通常从“进程是否存在、状态是否正常、资源占用是否异常”这条线入手