2009-10-29 3 views
7

하위 프로세스 인 특정 실행중인 프로세스 그룹에서 대기하는 경우 WIFEXITED는 프로세스가 종료되었다는 사실을 반환합니까? 이것이 작동하는 방식입니까? 당신이 WNOHANG을 지정된대로 내가 waitpid이 너무 WIFEXITED 업데이트 된 데이터와 함께 작동하지 않습니다 전의 값을 0pstatus을하고있다 반환 생각 ....왜 WIFEXITED가 실행중인 프로세스에서 True를 반환합니까?

if (waitpid(-pgid, &pstatus, WUNTRACED|WNOHANG) == -1) 
    perror("Wait error"); 

if (WIFEXITED(pstatus)) { 
    strncpy(buf, "Exited", buf_size); 
    return 0; 

답변

6

뭔가 내가 이해하고 있지 않다가 보인다.

WNOHANG 지정 및 하나 이상의 자녀 (들) 된 경우 pid에 의해 지정된 는 존재하지만 아직 변경된 상태, 는 다음 0가 반환됩니다 있습니다.

+0

아,하지만 지금은 종류의 이해 : 자세한 내용은 여기를 참조하십시오. 하지만 뭔가가 아직 실행 중인지 또는 종료했는지 (차단하지 않고) 있는지 확인하는 방법을 이해하지 못합니다. –

+0

자녀가 상태가 변경된 경우 (사망) waitpid는 양수를 반환합니다. –

+0

오, 이제 이해합니다 ... 프로세스의 상태를 얻으려면 반환 값과 상태 값을 모두 가져야합니다. (반환 값은 에러를위한 것이 아닙니다.) 고맙습니다! –

1

은 성공적으로 자식을 얻는 경우 reaped 자식 pid를 반환합니다. WNOHANG과 함께 사용하면 종료 된 자식이 없으면 즉시 0을 반환합니다. 따라서 status을 검사하기 전에 반환 값이 0인지 또는 pid인지 확인해야합니다. 나는 0으로 다시 초기화 한,

http://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html

관련 문제