Linux中进程状态

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

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

进程状态转换图

前边说running是进程在用户态中唯一可能的状态,因为无法想象一个进程睡眠在用户态是什么情况,进程调度的工作是在内核中完成的,不管是唤醒还是睡眠一个进程都要保证这个进程目前属于内核的控制下。

实际中在使用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

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值