3.7 KiB
3.7 KiB
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:高亮指定进程及其祖先进程
示例:
pstree -p
5.2 ps
用于查看进程快照。
常见选项:
a:显示所有终端相关进程x:显示不依赖终端的进程u:显示用户信息f:树状显示父子关系
高频示例:
ps aux
ps -ef
ps auxf
5.3 pidof 与 pgrep
pidof nginx
pgrep nginx
适合快速查找某个进程的 PID。
5.4 top 与 htop
top:动态查看系统负载、CPU、内存、进程情况htop:更友好的交互式进程查看工具
5.5 pmap
pmap PID
用于查看进程内存映射。
5.6 vmstat
vmstat 1
用于观察系统整体运行情况,如 CPU、内存、上下文切换、I/O 等。
5.7 iostat
iostat
用于查看 CPU 和磁盘 I/O 情况,通常来自 sysstat 软件包。
5.8 lsof
lsof -p PID
用于查看某个进程打开了哪些文件、端口、套接字。
6、进程控制命令
6.1 kill
用于按 PID 发送信号。
kill PID
kill -9 PID
6.2 pkill
用于按进程名或条件杀进程。
pkill nginx
6.3 nohup
用于让命令在退出终端后继续运行。
nohup command &
6.4 jobs、bg、fg
这些命令用于 shell 作业控制:
jobs:查看当前 shell 的作业bg:把任务放到后台继续执行fg:把后台任务切回前台
7、常见排障场景
7.1 查某个服务是否存在
ps -ef | grep nginx
pgrep nginx
7.2 查谁占用 CPU 高
top
htop
7.3 查进程打开了哪些文件
lsof -p PID
7.4 查进程内存映射
pmap PID
7.5 查僵尸进程
ps aux | grep ' Z '
8、小结
- 进程是资源分配和调度的核心对象
R、S、D、T、Z是最常见的进程状态ps、pstree、top、htop、lsof是高频排障命令kill、pkill、nohup、jobs、bg、fg常用于进程控制- 排查问题时,通常从“进程是否存在、状态是否正常、资源占用是否异常”这条线入手