执行“vfork without exec”的进程如何最终陷入长时间的不间断睡眠?

执行“vfork without exec”的进程如何最终陷入长时间的不间断睡眠?

这个答案用户建议

通常,不间断睡眠不会持续很长时间,但在 Windows 下,损坏的驱动程序或损坏的用户空间程序(没有 exec 的 vfork)最终可能会永远在 D 中休眠。

用户空间程序如何真正锁定在无错误内核的 D​​ 中?我认为用户模式能够故意卡在 D 中是一个小漏洞......

答案1

当进程调用 时vfork,只要子进程尚未执行_exitexecve(唯一的两个授权函数,以及execve的亲戚execvp,如 等),父进程就会保持在状态 D。父进程仍在执行vfork调用,因此处于状态 D。

如果孩子做了这样的事情(这是愚蠢的,但有效),父母将无限期地保持在状态 D,而孩子将无限期地保持在状态 R。

if (!vfork()) while (1) {}

相关内容