!["exec 없이 vfork"를 수행하는 프로세스는 어떻게 중단 없이 긴 절전 모드에 빠지게 됩니까?](https://linux55.com/image/56059/%22exec%20%EC%97%86%EC%9D%B4%20vfork%22%EB%A5%BC%20%EC%88%98%ED%96%89%ED%95%98%EB%8A%94%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%8A%94%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%A4%91%EB%8B%A8%20%EC%97%86%EC%9D%B4%20%EA%B8%B4%20%EC%A0%88%EC%A0%84%20%EB%AA%A8%EB%93%9C%EC%97%90%20%EB%B9%A0%EC%A7%80%EA%B2%8C%20%EB%90%A9%EB%8B%88%EA%B9%8C%3F.png)
존재하다이 답변사용자 제안
일반적으로 중단 없는 절전 모드는 오래 지속되지 않지만 Windows에서는 손상된 드라이버나 손상된 사용자 공간 프로그램(exec가 없는 vfork)으로 인해 D에서 영원히 절전 모드가 될 수 있습니다.
버그 없는 커널의 D에 사용자 공간 프로그램이 실제로 어떻게 잠길 수 있습니까? 유저모드가 일부러 D에 갇힐 수 있는건 작은 버그인거 같은데...
답변1
프로세스에 의해 호출되면 상위 프로세스는 하위 프로세스가 아직 vfork
실행되지 않는 한 (단 두 개의 인증된 기능과 그 친척 등) D 상태로 유지됩니다. 상위 프로세스는 여전히 호출을 실행 중이므로 상태 D에 있습니다._exit
execve
execve
execvp
vfork
아이가 이와 같은 일을 하면(어리석지만 효과가 있는), 부모는 상태 D에 무기한 남게 되고, 아이는 상태 R에 무기한 남게 됩니다.
if (!vfork()) while (1) {}