linux进程的七种状态

2019-04-14 08:44发布

在学操作系统原理的时候,书上都说进程分为5种状态,分别为:新建状态、就绪状态、运行状态、阻塞状态,结束状态 他们的转换关系如下图 但是查了linux的进程状态之后,发现并不是那么回事,linux进程状态分为7种,分别如下: 1、R (TASK_RUNNING):运行状态,即包括了上图中的就绪状态和运行状态 2、S (TASK_INTERRUPTIBLE):可中断的睡眠状态,即上图中的阻塞状态。在这个状态下进程是可被中断的,即收到信号之后可以执行信号处理函数 3、D (TASK_UNINTERRUPTIBLE):不可中断的睡眠状态。磁盘IO时会出现这种状态,在此状态下,进程是不能被中断的,即不能响应信号。但是可以响应外部硬件中断 4、T (TASK_STOPPED):停止状态。记得是大写的T。当进程收到SIGSTOP信号后就处于停止状态,可以发送SIGCONT信号让进程继续运行 5、X (TASK_DEAD - EXIT_DEAD):退出状态(死亡状态)。进程即将被销毁,通常是在父进程中设置SIGCHLD信号的handler为SIG_IGN,显式忽略了SIGCHLD信号。在使用ps命令查看进程状态时很难捕捉到这种状态 6、Z (TASK_DEAD - EXIT_ZOMBIE):僵尸状态。子进程先于父进程退出,并且父进程没有调用wait或waitpid回收子进程。此时子进程即处于僵尸状态 7、t(TASK_TRACED):跟踪状态,记得是小写的t,和停止状态只是大小写的区别。当利用gdb调试某个程序,程序停留在某个断点处时,就处于跟踪状态。 详细的状态描述参看这篇博文:Linux进程状态解析之R、S、D、T、Z、X 当利用命令:ps -aux 查看进程状态时,STAT字段还有其他的一些字符,其中部分表示如下: < 高优先级 N 低优先级 L 有pages在内存中locked。用于实时或者自定义IO。 s 进程领导者,其有子进程。 l 多线程 + 位于前台进程组。