Linux中进程状态

linux进程描述符结构task_struct中的state域用来描述进程所处的状态,系统中的进程都必然处于这五种状态中的一种:

  • TASK_RUNNING (运行)——进程是可执行的;它或者正在执行,或者在运行队列中等待执行。这是进程在用户空间中执行的唯一可能的状态;这种状态也可以应用到内核空间中正在执行的进程。
  • TASK_INTERRUPTIALBE (可中断)——进程正在睡眠(也就是说它被阻塞),等待某些条件的达成。一旦这些条件达成,内核就会把进程状态设置为运行。处于此状态的进程也会因为接受到信号而提前被唤醒并随时准备投入运行。
  • TASK_UNINTERRUPTIBLE (不可中断)——除了就算是接收到信号也不会被唤醒或准备投入运行外,这个状态与可达断状态相同。这个状态通常在进程必须在等待时不受干扰或等待时间很快就会发生时出现。由于处于此状态的任务对信号不做响应,所以较之可中断状态,使用的较少。
  • __TASK_TRACED ——被其他进程跟踪的进程,例如通过ptrace对调试程序进行跟踪。
  • __TASK_STOPPED (停止)——进程停止执行,进程没有投入运行也不能投入运行,通常这种状态发生在接收到SIGSTOP SIGTSTP SIGTTIN SIGTTOU等信号的时候。此外在调试期间接收到任何信号,都会使进程进入这种状态。

以上摘抄自《linux内核设计与实现》

实际中在使用ps命令查看系统进程运行状态的时候会有一下几种情况

 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

前五种对应上边的五种进程状态,还多了一种僵死状态。

猜你喜欢

转载自blog.csdn.net/qq_33113661/article/details/88930349