可运行状态(TASK_RUNNING):它是可以调到CPU上执行的。
可中断的等待状态(TASK_INTERRUPTIBLE):进程被挂起(睡眠),直到某个条件为真,如sleep操作都可以将进程挂起,或是一些阻塞的系统调用都有这个效果。但是可以通过信号将进程唤醒,所谓唤醒的确切含义是:将进程的状态修改为TASK_RUNNING。
不可中断的等待状态(TASK_UNINTERRUPTIBLE):这个状态意味着把信号传递到睡眠进程不能改变它的状态,它的适用场合可以在这种情况下:当进程打开一个设备文件,其相应的设备驱动开始probe相应的硬件设备,在探测完成之前,设备驱动是不可被中断的。
暂停状态(TASK_STOPPED):它表示进程的执行被暂停了下来了,那么如何进入这种状态呢,当进程收到SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU信号后,进入这个状态。
跟踪状态(TASK_TRACED):这个状态怎么出现的呢?进程的执行已由debugger程序暂停,当一个进程被另一个进程监控时(debugger执行ptrace()系统调用监控一个测试程序),这个时候任何的信号都可以将程序置于TASK_TRACED状态。gdb的实现可能用了ptrace系统调用。
僵死状态(EXIT_ZOMBIE):这个时候,进程的执行已被终止,发所有的信号都起作用。但是此时父进程还没有执行wait4或waitpid系统调用来返回有关死亡进程的信息。在执行wait系统调用前,内核不能丢弃包含在死亡进程描述符中的数据,因为父进程可能还需要它。
僵死撤销状态 (EXIT_DEAD):最终状态,由父进程调用wait或waitpid,此时进程由系统删除,为了防止其他执行线程在同一个进程上也执行wait,而把进程的状态由EXIT_ZOMBIE改为EXIT_DEAD
阅读(1401) | 评论(0) | 转发(0) |