- R(Task Running),处于执行中或者可执行的处于CPU队列中的线程状态。
- S(TASK_INTERRUPTIBLE),处于睡眠状态,可被中断唤醒。
- D(TASK_UNINTERRUPTIBLE),处于休眠状态,不可中断,意味着不会响应信号,例如使用kill无法杀死进程。
- T (TASK_STOPPED or TASK_TRACED), 进程停止或者跟踪状态,进程接收到信息SIGSTOP,SIGSTP,SIGTIN,SIGTOU信号以后处于这两个状态。处于TASK_STOPPED状态的线程收到 SIGCONT可以恢复到TASK_RUNNING状态。
- Z (TASK_DEAD - EXIT_ZOMBIE)退出状态,进程成为僵尸进程 ,进程已经处于推出状态,但是还保留这task_struct,等待父进程的回收。
- X (TASK_DEAD - EXIT_DEAD)退出状态,进程即将被销毁,正常情况下应该几乎看不到处于这个状态的进程。
一般而言,在Linux系统下可以通过ps aux
命令查看到所有的进程信息,其中STAT列,表示的就是进程的状态。通常青枯杨下还会跟随如下信息,表示更加详细的状态。
- < 高优先级
- N 低优先级
- L 有页在内存中处于locked状态
- s进程领导者,含有子进程。
- I 多线程
- +位于前台进程组
我们经常采用vmstat 2
命令查看当前系统的CPU队列,队列中有两列r和b,r代表运行中的或者处于可运行状态的CPU队列长度,如果这个长度超过CPU的核数,则代表目前已经过过载,因为CPU来不及处理当前的线程。
b代表的是被阻塞的线程,可以看作是处于S、D、T状态的线程数量。