Linux进程睡眠状态disk sleep



Linux进程睡眠状态disk sleep

Linux-进程管理

1. Linux进程状态

  • Running(R):运行或将要运行
  • Interruptible(S):被阻断而等待一个事件,可能会被一个信号激活
  • Uninterruptible(D):被阻断而等待一个事件,不会被信号激活
  • Stopped(T):由于任务的控制或者外部的追踪而被终止,比如:strace
  • Zombie(Z):僵死,但是它的父进程尚未调用wait函数.
  • Deal(X):这个永远看不见

2. 睡眠状态disk sleep

Linux进程有两种睡眠状态,一种interruptible sleep,处在这种睡眠状态的进程是可以通过给它发信号来唤醒的,也是可以kill的,进程状态如下

#cat /proc/[pid]/status
Name:   sysmgt
State:  S (sleeping)

另外一种睡眠状态是uninterruptible sleep,处在这种状态的进程不接受外来的任何信号,这也是为什么之前我无法用kill杀掉这些处于D状态的进程,无论是”kill”, “kill -9″还是”kill -15″,因为它们压根儿就不受这些信号的支配。

#cat /proc/[pid]/status
Name:   sysmgt
State:  D (disk sleeping)

进程为什么会被置于uninterruptible sleep状态呢?处于uninterruptible sleep状态的进程通常是在等待IO,比如磁盘IO,网络IO,其他外设IO,如果进程正在等待的IO在较长的时间内都没有响应,那么就很会不幸地被 ps看到了,同时也就意味着很有可能有IO出了问题,可能是外设本身出了故障,也可能是比如挂载的远程文件系统已经不可访问了,我这里遇到的问题就是由互斥锁引起的,比如说我开了8个进程同时访问一个io,访问的时候势必会加锁来保护资源,那么,当一个进程正在访问的时候,其他进程如果在等待锁,那么就会进入disk sleep,当你执行kill,它不会立即响应,当锁满足条件的时候才可能响应信号。https://blog.csdn.net/davion_zhang/article/details/48268319

3. 场景重现

# ps -ef | grep vpp
root     252610      1  0 11:37 ?        00:00:00 vpp -c startup-iperf3.conf
root     252913      1  0 11:39 ?        00:00:00 vpp
root     271022 252936  0 14:15 pts/8    00:00:00 grep --color=auto vpp

# cd /proc/252610/task/252610/
# cat status 
Name:	vpp
Umask:	0022
State:	D (disk sleep)
Tgid:	252610
Ngid:	0
Pid:	252610
PPid:	1
...

以上内容由RToax编写,或翻译、整理自网络。
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值