"exec 없이 vfork"를 수행하는 프로세스는 어떻게 중단 없이 긴 절전 모드에 빠지게 됩니까?

"exec 없이 vfork"를 수행하는 프로세스는 어떻게 중단 없이 긴 절전 모드에 빠지게 됩니까?

존재하다이 답변사용자 제안

일반적으로 중단 없는 절전 모드는 오래 지속되지 않지만 Windows에서는 손상된 드라이버나 손상된 사용자 공간 프로그램(exec가 없는 vfork)으로 인해 D에서 영원히 절전 모드가 될 수 있습니다.

버그 없는 커널의 D에 사용자 공간 프로그램이 실제로 어떻게 잠길 수 있습니까? 유저모드가 일부러 D에 갇힐 수 있는건 작은 버그인거 같은데...

답변1

프로세스에 의해 호출되면 상위 프로세스는 하위 프로세스가 아직 vfork실행되지 않는 한 (단 두 개의 인증된 기능과 그 친척 등) D 상태로 유지됩니다. 상위 프로세스는 여전히 호출을 실행 중이므로 상태 D에 있습니다._exitexecveexecveexecvpvfork

아이가 이와 같은 일을 하면(어리석지만 효과가 있는), 부모는 상태 D에 무기한 남게 되고, 아이는 상태 R에 무기한 남게 됩니다.

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

관련 정보