scheduler06
linux睡眠
linux睡眠可以分为 浅度睡眠TASK_INTERRUPTIBLE
、深度睡眠TASK_UNINTERRUPTIBLE
、TASK_KILLABLE
。
浅度睡眠TASK_INTERRUPTIBLE
:可以被SIGINT(2)
、SIGKILL(9)
信号唤醒,或等待资源到达而唤醒
深度睡眠TASK_UNINTERRUPTIBLE
:不可以被SIGINT(2)
、SIGKILL(9)
信号唤醒,只能等待资源到达而唤醒
TASK_KILLABLE
:不可以被SIGINT(2)
信号唤醒,可以被SIGKILL(9)
信号唤醒,或等待资源到达而唤醒。
注意:默认时,SIGINT(2)
信号可以转化为SIGKILL(9)
信号。
但是在某些情况下,如:SIGINT(2)
信号被重新定义 执行函数或SIG_IGN
信号,不可以转化。
D状态
D状态一般是指深度睡眠TASK_UNINTERRUPTIBLE
或TASK_KILLABLE
。
D状态进程会使top
命令的load average
增加,但是cpu%很低。
为什么需要深度睡眠?
硬盘之类的外设必须设置为 深度睡眠TASK_UNINTERRUPTIBLE
,其它大部分外设只需要设置为 浅度睡眠TASK_INTERRUPTIBLE
Last updated
Was this helpful?