2013-02-04 8 views
2

wait()와 waitpid() 사이의 차이점 중 하나는 waitpid가 WNOHANG 옵션을 사용하여 waitpid가 실행중인 자식이 있으면 차단하지 않는다는 것을 알 수 있다는 것입니다. 아직 끝나지 않은 내가 대신 waitpid를()의 대기()를 사용하는 경우while 루프 내에서 waitpid() 대신 wait() 사용

while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0) 
    printf("Child %d terminated\n", pid); 

아직 종료되지 않은 아이들이 실행중인 경우 차단에서 대기를 방지 할 수있는 방법은()가 없다 : 같은. 그러나 wait()가 제대로 작동하는지 궁금하다.

+1

루프는 처리가 끝나는 한 반복됩니다. 그렇지 않으면 자식 프로세스가 종료되지 않으면'waitpid'를 한 번 호출하게됩니다.이 호출은'0'을 반환하고 루프에서 벗어납니다. –

+0

자식이 종료 되었기 때문에 excute하는 신호 처리기 (SIGCHLD 신호 잡기)에이 코드를 넣으면 wait()가 제대로 작동합니까? – Nmzzz

+0

만약'SIGCHLD' 시그널을 받았다면, 당신은 자식 프로세스에서 어떤 일이 발생했는지 알 수 있기 때문에 블로킹하지 않고'wait'를 호출 할 수 있습니다. –

답변

-1

우리는 가 아직 종료되지 않은 아이들이 실행중인 경우 차단에서 대기 방지 할 수있는 방법이 없기 때문에 은, 루프에서 대기 호출 할 수 없습니다.

관련 문제