在这个答案用户建议
通常,不间断睡眠不会持续很长时间,但在 Windows 下,损坏的驱动程序或损坏的用户空间程序(没有 exec 的 vfork)最终可能会永远在 D 中休眠。
用户空间程序如何真正锁定在无错误内核的 D 中?我认为用户模式能够故意卡在 D 中是一个小漏洞......
答案1
当进程调用 时vfork
,只要子进程尚未执行_exit
或execve
(唯一的两个授权函数,以及execve
的亲戚execvp
,如 等),父进程就会保持在状态 D。父进程仍在执行vfork
调用,因此处于状态 D。
如果孩子做了这样的事情(这是愚蠢的,但有效),父母将无限期地保持在状态 D,而孩子将无限期地保持在状态 R。
if (!vfork()) while (1) {}