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

3.7 KiB
Raw Blame History

1、进程概览

进程是程序的一次运行实例,是操作系统进行资源分配和调度的基本单位。

可以简单理解为:

  • 程序:静态文件
  • 进程:程序运行起来后的动态实体

2、进程的基本状态

常见运行状态包括:

  • 创建状态:进程刚被创建
  • 就绪状态:已准备运行,等待分配 CPU
  • 运行状态:正在执行
  • 阻塞状态:等待某些资源或事件,例如 I/O
  • 终止状态:执行结束或异常退出

在 Linux 中,pstop 等命令里更常看到下面这些状态码:

  • RRunning运行中或在运行队列中
  • SSleeping可中断睡眠
  • DUninterruptible Sleep不可中断睡眠常见于 I/O 等待
  • TStopped被暂停或被调试
  • ZZombie僵尸进程

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 pidofpgrep

pidof nginx
pgrep nginx

适合快速查找某个进程的 PID。

5.4 tophtop

  • 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 jobsbgfg

这些命令用于 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、小结

  • 进程是资源分配和调度的核心对象
  • RSDTZ 是最常见的进程状态
  • pspstreetophtoplsof 是高频排障命令
  • killpkillnohupjobsbgfg 常用于进程控制
  • 排查问题时,通常从“进程是否存在、状态是否正常、资源占用是否异常”这条线入手