在学操作系统原理的时候,书上都说进程分为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 多线程

+ 位于前台进程组。

关于进程状态的描述,也可以使用命令 man ps 查看ps的说明文档,下面是我摘自ps说明文档的部分:

PROCESS STATE CODES
       Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process:

               D    uninterruptible sleep (usually IO)
               R    running or runnable (on run queue)
               S    interruptible sleep (waiting for an event to complete)
               T    stopped by job control signal
               t    stopped by debugger during the tracing
               W    paging (not valid since the 2.6.xx kernel)
               X    dead (should never be seen)
               Z    defunct ("zombie") process, terminated but not reaped by its parent

       For BSD formats and when the stat keyword is used, additional characters may be displayed:

               <    high-priority (not nice to other users)
               N    low-priority (nice to other users)
               L    has pages locked into memory (for real-time and custom IO)
               s    is a session leader
               l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
               +    is in the foreground process group

 

 

GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐