linux任务的几种状态

linux任务的几种状态

而我们用ps,top看到的任务状态还需要转一下

R:任务正在CPU上运行,或已获取除CPU外所有的资源,正在等待调度运行,当linux任务无法获取所需资源时,如通过软中断陷入内核态调用会引起阻塞的系统调用read,accept,epoll_wait,select等,不能继续运行下去时会在内核态改变自己的状态为阻塞态,然后进行任务切换

S:当阻塞可以被信号中断如net read,net write,accept,epoll_wait,select时就设状态为TASK_INTERRUPTIBLE也就是top看到的S状态

D:当陷入到内核态后完成相关操作时的阻塞不可以被信号中断,如当由于读写磁盘无法立即满足时,磁盘等待队列已经很长了,这时一个linux任务再发起一个disk read,而恰好此read所需的数据所在的磁盘block未被cache在文件系统的高速缓冲区,此linux任务就会被设为TASK_UNINTERRUPTIBLE等待磁盘驱动程序IO完成,也就是top看到的D状态,而此时iowait及系统负载也是很高的,而此状态其实并不只是包含disk sleep,disk sleep只是我们常见到的导致务状态是D一种情况,可能是历史原因最初OS只有磁盘读写会被设为TASK_UNINTERRUPTIBLE

T:被SIGSTOP信号暂停,strace跟踪,gdb调试时的状态

Z:当父进程未退出,子进程退出但父进程未忽略SIGCLD信号,时子进程的状态,在父进程收尸后状态会转变为X,如果父进程不及时调用wait收尸,系统会存在僵尸进程占用进程描述符

X:当父进程忽略SIGCLD信号,子进程退出时的状态

当一个S,D状态的linux任务已获取到所需资源如read到数据,accept到新连接,获取到锁时,就会从S,D状态转变为R状态,状态R代表任务正在CPU上运行或已经获取到所有除CPU外的所有资源,万事俱备只欠东风,只待被调度器选中调度到CPU上运行了

同样是read write,为什么net read wirte阻塞后是TASK_INTERRUPTIBLE,而被disk read wirte阻塞后是TASK_UNINTERRUPTIBLE?

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值