scheduler06

linux睡眠

linux睡眠可以分为 浅度睡眠TASK_INTERRUPTIBLE、深度睡眠TASK_UNINTERRUPTIBLETASK_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_UNINTERRUPTIBLETASK_KILLABLE

D状态进程会使top命令的load average增加,但是cpu%很低。

为什么需要深度睡眠?

硬盘之类的外设必须设置为 深度睡眠TASK_UNINTERRUPTIBLE,其它大部分外设只需要设置为 浅度睡眠TASK_INTERRUPTIBLE

Last updated

Was this helpful?