source

waitpid, wnohang, 추적되지 않은.사용 방법

ittop 2023. 6. 26. 23:12
반응형

waitpid, wnohang, 추적되지 않은.사용 방법

저는 조금 혼란스럽습니다.제가 이해한 바로는, pid가 -1인 waitpid는 제가 모든 아이들이 끝날 때까지 기다린다는 뜻이지만, WNOHANG의 waitpid에 옵션을 추가하면, 그 옵션은 완료된 아이가 없으면 즉시 종료하라는 것입니다.이것들은 극도로 혼란스러워 보입니다.

하위 프로세스가 완료될 때까지 기다렸다가 완료된 하위 프로세스가 없으면 즉시 종료하도록 컴퓨터에 지시하는 이유는 무엇입니까?

누가 이 옵션과 UNTRACE 옵션에 대해 설명해 줄 수 있습니까?추적한다는 게 무슨 뜻인지 모르겠어요

당신은 보통 WNOHANG과 WUNTRACED를 다른 경우에 사용합니다.

사례 1: 한 무리의 아이들을 낳아 아이들이 달리는 동안 다른 일을 해야 하는 과정이 있다고 가정해 보겠습니다.이러한 아이들은 때때로 종료되거나 종료되지만 커널은 다른 프로세스가 wait() 또는 waitpid()를 통해 요청할 때까지 종료 상태를 유지합니다.따라서 커널이 자식의 유해를 제거할 수 있도록 부모 프로세스에서 wait()/waitpid()를 호출해야 합니다.그러나 wait()/waitpid()가 차단되는 것을 원하지 않습니다. 이 경우 프로세스가 수행해야 하는 다른 작업이 있기 때문입니다.우리는 단지 죽은 공정의 상태가 있다면 수집하고 싶습니다.그래서 WNOHANG은.프로세스가 다른 작업을 계속할 수 있도록 wait()/waitpid()가 차단되지 않도록 합니다.어린이가 사망한 경우, pid는 wait()/waitpid()에 의해 반환되며 프로세스는 이에 따라 작업을 수행할 수 있습니다.아무것도 죽지 않은 경우 반환되는 pid는 0입니다.

사례 2: 부모 프로세스가 자녀가 실행 중인 동안 아무것도 하지 않기를 원한다고 가정합니다.루프를 위해 엄지손가락을 흔들기만 하는 것이 아니라 WNOHANG 없이 일반 wait()/waitpid()를 사용합니다.프로세스는 자식 중 하나가 죽을 때까지 실행 대기열에서 제외됩니다.하지만 만약 당신의 아이들 중 한 명이 SIGSTOP를 통해 멈춰진다면 어떻게 될까요?자녀가 설정한 작업을 더 이상 수행하지 않지만 부모는 여전히 대기 중입니다.따라서, 어떤 의미에서, 아이가 부모와 그 아이의 외부에서 어떤 방법으로 계속되지 않는 한 교착 상태에 빠질 수 있습니다. WUNTRACED는 아이가 밖으로 나가거나 죽임을 당했을 때 부모가 wait()/waitpid()에서 돌아올 수 있도록 합니다.이런 식으로 부모님은 SIGCONT를 전송하여 계속하거나 죽이거나 다른 아이에게 작업을 할당할 수 있습니다.

당신이 면격하를 한다면.-1그리고.WNOHANG,waitpid()좀비 아이들이 있는지 확인할 겁니다예를 선택하면 이 중 하나가 회수되고 종료 상태가 반환됩니다.그렇지 않다면, 둘 중 하나.0되지 않은가 있는 ) (종료되지 않은 자녀가 있는 경우) 됩니다.-1않을 경우) 및 반됨그(반복됨)ERRNO으로 설정됨ECHILD(하위 프로세스 없음).이 기능은 자녀 중 한 명이 사망할 때까지 기다리지 않고 최근에 사망한 자녀가 있는지 확인하려는 경우에 유용합니다.이 점에서 꽤 유용합니다.

»WUNTRACED아래와 같이 문서화되어 있습니다. 이 설명에 추가할 내용은 없습니다.

WUNTRACEDpid에 의해 지정된 중지된 하위 프로세스의 상태와 중지된 이후 상태가 아직 보고되지 않은 모든 하위 프로세스의 상태도 요청 프로세스에 보고되어야 합니다.

자세한 내용은 POSIXwaitpid 페이지를 참조하십시오.

언급URL : https://stackoverflow.com/questions/33508997/waitpid-wnohang-wuntraced-how-do-i-use-these

반응형