在linux_4.1.15\include\linux\sched.h文件中定义了进程的状态;
#define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define __TASK_STOPPED 4
#define __TASK_TRACED 8
/* in tsk->exit_state */
#define EXIT_DEAD 16
#define EXIT_ZOMBIE 32
#define EXIT_TRACE (EXIT_ZOMBIE | EXIT_DEAD)
/* in tsk->state again */
#define TASK_DEAD 64
#define TASK_WAKEKILL 128
#define TASK_WAKING 256
#define TASK_PARKED 512
#define TASK_STATE_MAX 1024
1、TASK_RUNNING(R)
可执行状态,包括就绪状态和正在CPU上执行的状态;
2、TASK_INTERRUPTIBLE(S)
可中断睡眠状态,即阻塞状态,之所以处于这个状态是因为进程资源未准备好而被阻塞;
3、TASK_UNINTERRUTIBLE(D)
不可中断状态的睡眠状态,该状态不可被信号唤醒,用于处理某些流程不能被打断的任务;
4、TASK_DEAD(Z)
僵尸进程,父进程不退出且没有对已结束的子进程执行wait系统调用,子进程就处于僵尸状态,如果父进程结束运行,会将子进程托管给别的进程使之成为别的进程的子进程;
参考资料
《操作系统之编程观察》-罗秋明 第三章