当我通过/ proc // stat检查我的进程的进程状态输出时,然后知道它主要在" D"这意味着不可怜的睡眠。我知道它正在做一些不能被打断的操作,但有人可以帮我列出这个IO /不间断睡眠中所包含的操作吗?
任何链接也可以理解。
D不间断睡眠(通常为IO) R正在运行或可运行(在运行队列中) S可中断睡眠(等待事件完成) T通过作业控制信号停止或因为它被跟踪而停止。 W分页(自2.6.xx内核以来无效) X死了(绝不应该看到) Z Defunct(" zombie")进程终止但未被其父级收回。
谢谢..
答案 0 :(得分:1)
当进程发出IO请求(它可以是磁盘,网络等)并等待请求完成时,进程会进入不间断睡眠状态。通常D状态下的过程数量很大(例如,超过5-6;当然这取决于),这表明可能存在一些需要解决的严重问题。
下面的案例是D状态中许多过程的原因:
wchan
命令的ps
说明符可以给出关于睡眠原因的好提示:
ps -eo ppid,pid,user,stat,pcpu,comm,wchan
更具体地说,wchan
说明符显示以下信息(man ps):
name of the kernel function in which the process is sleeping, a "-" if the process is running, or a "*" if the process is multi-threaded and ps is not displaying threads.
答案 1 :(得分:0)
它可能是磁盘I / O某些(慢)调用可以返回EINTR,例如,读取等待来自tty的键盘输入。快速系统调用不会被信号中断。
https://unix.stackexchange.com/questions/62693/why-uninterruptible-sleep-is-not-counted-as-idle
有关Wiki Sleep的不间断睡眠的更多信息 此页面显示了如何使用vfork(2)disown, zombie children, and the uninterruptible sleep来诱导此状态 来自Novell Processes in an Uninterruptible Sleep (D) State
的一些支持信息