2016-11-20 13 views
1

wait()가 작동했는지 확인하려면 다음과 같이 확인해야할까요? 이론적으로 wait()가 실패하지 않으면 종료 된 자식 PID를 부모 프로세스로 반환해야합니다. 그렇지 않으면 부모 PID는 1이됩니다. 맞습니까?wait() 실패 여부 확인

switch (process = fork()) 
{ 
    case -1: 
     // Fork fail 
     perror("Fork failed"); 
     exit(EXIT_FAILURE); 

    case 0: 
     //Child process 
     HERE CODE DOES SOMETHING 
     exit(EXIT_SUCCESS); 
    default: 
     //Parent process 
     pid=wait(&status); 

     if(pid==1){ 
      perror("Wait failed"); 
     }else{ 
     exit(EXIT_SUCCESS); 
     } 
} 
+1

주로하는 데 도움이 : http://man7.org/linux/man-pages/man2/waitpid.2 .html – alk

+1

'wait'이 -1을 반환하고 기존 응답에 의해 덮어 쓰여진 오류의 경우 1이 아니라는 것을 제외하고는 'waitpid'를 사용하여 여러분이 방금 포크 한 프로세스를 기다리는 것을 확인하십시오. 종료되는 첫 번째 자식 프로세스 (이전에 fork되거나 다른 스레드에 의해 fork 될 수 있음). 또한, 자식 프로세스에 의해 상속받은 부모의 stdip 버퍼를 실수로 비우는 것을 막기 위해'exit' 대신'_exit'을 호출하는 것이 좋습니다. – user4815162342

+1

@ user4815162342 감사합니다. – krm

답변

5

인용 man 2 wait :

반환 값

대기() : 성공에 종료 된 자식의 프로세스 ID를 반환 에서 오류가 발생하면 -1이 반환됩니다.. wait(2)이 실패한다면

확인하기 위해이 충분해야한다 : 함수의 설명서를 읽기

if (wait(&status) == -1) { 
    perror("wait failed"); 
    exit(1); 
} 
+0

참고로이 http://man7.org/linux/man-pages/man2/waitpid.2.html을 사용하는 것이 더 좋습니다. 그것은 더 정확하고, up-date 및 스팸 메일이 적습니다. – alk