2010-03-29 6 views
0

자식 프로세스를 생성하고 즉시 종료하면 (_exit()) 대기를 수행하고 상태를 확인하려고합니다. 이제 if/else 구문의 'else'지점에서 WIFSIGNALED를 확인해야하는지 궁금합니다. 내가 이해할 수있는 한, 내가 기다림을하면, a) 오류가 발생할 수 있었고 (-1), 자식이 exit() 또는 _exit()에 의해 정상적으로 종료 될 수 있었거나, 신호가 없으므로 수표는 생략 할 수 있습니다.wait() 후 상태 확인

//remainder omitted 

int status; 

pid_t t_pid = wait(&status); 

if (t_pid == -1) { 
    perror("wait"); 
    exit(EXIT_FAILURE); 
} 

if (WIFEXITED(status)) { 
    printf("child terminated normally, status = %d\n", 
      WEXITSTATUS(status) 
    ); 
} else { // <-- do it have to check for WIFSIGNALED() here? 
    printf("child was terminated by a signal, signum = %d\n", 
      WTERMSIG(status) 
    ); 
} 

답변

1

예, 정확합니다. wait이 성공한 경우 WIFEXITED() 또는 WIFSIGNALED() 중 하나가 적용됩니다.

1

예. POSIX.1 상태 :

정보가 stat_loc가 대기에 WUNTRACED 또는 WCONTINUED 플래그를 지정하지 않은 는 waitpid()에 또는 호출에 의해 호출에 의해() 함수를 저장했다가 가리키는 경우, 정확히 WIFEXITED (* stat_loc) 매크로 중 하나가 이고 WIFSIGNALED (* stat_loc)가 이 아닌 값으로 평가됩니다. WUNTRACED 또는 WCONTINUED와 waitpid()를 사용

, 상태를 얻을 수 있습니다 곳 WIFSTOPPED (* stat_loc) 또는 WIFCONTINUED (* stat_loc)가 대신 사실이다.

+0

+1 아주 좋은 설명, thx – helpermethod