进程描述符中的state字段描述了进程当前所处的状态,它有一组标志组成,每个标志描述一种可能的进程状态,这些状态是互斥的,也就是说在同一时刻,只能设置一个状态
一、运行状态:TASK_RUNNING,进程要么在CPU上运行,要么准备执行
二、可中断的等待状态:TASK_INTERRUPTIBLE,进程被挂起,直到收到某个消息,唤醒该进程
三、不可中断的等待状态:TASK_UNINTERRUPTIBLE ,当等待的条件为真时,并不能改变当前进程的状态
四、暂停状态:TASK_STOPPED,当执行的进程收到暂停的信号时,进入暂停状态
五、跟踪状态:TASK_TRACED,进程的执行由debugger程序暂停,当一个进程被另一个进程监控时,任何信号都可以把这个进程设置为跟踪状态
还有两个状态既可以存放在进程描述符的state字段中,也可以放在exit_state字段中,从这两个进程的名字可以看出,只有进程终止时,才有可能进入这两种状态
六、僵死状态:EXIT_ZOMBIE,进程的执行被终止,但是,父进程还没有发布wait4()和waitpid()系统调用来返回有关死亡进程的信息。之前,内核不能丢弃包含在死进程描述符中的数据,父进程还有可能需要它
七、僵死撤销状态:EXIT_DEAD,最终状态,父进程已经发布了wait4()和waitpid()系统调用,因而系统由系统删除,为了防止其他执行线程也在同一进程上执行wait()系统调用,所以把进程的状态由僵死状态改完僵死撤销状态
State字段的值通常用一个简单的赋值语句设置:
p->state=TASK_RUNNING;
内核也使用set_task_state和set_current_state()宏,他们分别设置指定进程的状态和当前进程的状态。o宏宏