Linux 进程状态详解
进程状态的基础认知与内核视角
操作系统中的进程状态概览
在操作系统中,进程状态是核心概念。一般包括新建、就绪、运行、阻塞、终止等常见状态。
- 新建:系统为进程分配资源。
- 就绪:等待 CPU 调度。
- 运行:正在执行指令。
- 阻塞:等待事件完成(如 I/O)。
- 终止:任务完成,回收资源。
这些状态相互转换,维持系统运转。
Linux 内核里的进程状态定义
Linux 内核通过 task_state_array 数组定义进程状态,核心成员包括 R (running)、S (sleeping)、D (disk sleep)、T (stopped)、X (dead) 和 Z (zombie)。
static const char * const task_state_array[] = {
"R (running)",
"S (sleeping)",
"D (disk sleep)",
"T (stopped)",
"t (tracing stop)",
"X (dead)",
"Z (zombie)"
};
常用查看命令:ps aux / ps axj。
运行状态(R - running)
运行状态的进程不一定正在 CPU 上执行,可能在运行队列中等待调度。调度器根据优先级或时间片轮转分配 CPU 资源。
睡眠状态(S - sleeping)
S (sleeping) 状态的进程在等待特定事件结束,常与阻塞状态相关。例如进行 I/O 操作时进入睡眠态,释放 CPU 资源,待数据准备好后被唤醒。
代码实例中的进程状态变化
经典代码展示进程状态切换
以下 C 代码演示了进程创建后的状态变化:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
ret = fork();
(ret < ) {
perror();
;
} (ret == ) {
(, getpid(), ret);
} {
(, getpid(), ret);
}
sleep();
;
}


