Coding Tip/C/C++

wait(), waitpid() 옵션 별 사용 설명

장피디 2012. 9. 3. 11:42
반응형

출처 : http://blog.naver.com/dalmagru?Redirect=Log&logNo=70068719762

 

wait(), waitpid() : 부모 프로세스가 자식 프로세스가 종료했음을 확인하는 함수.

waitpid() : 인자로 프로세스ID를 받음으로써 특정 자식 프로세스의 종료를 기다릴수 있다.

 

함수원형

#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);

 


※ 자식 프로세스의 상태를 확인하는 매크로들

매크로

세부사항

WIFEXITED(status)

0이 아닌 값을 리턴하면 자식프로세스가 정상종료했다는 뜻이다.

WEXITSTATUS(status)

WIFEXITED(status)매크로를 통하여 자식 프로세스가 정상종료했음을 확인하면 이 매크로를 통하여 종료 코드를 확인할 수 있다. 이 종료 코드는 exit()나 _exit()에서 인자로 주는 값을 말한다. 즉 exit(0)으로 프로그램을 종료했다면 이 0 값이 WIFEXITED 매크로로 알수 있다. 단, 이 매크로는 하위 8비트 값만을 확인하므로 0부터 255까지의 값까지 확인할 수 있다.

WIFSIGNALED(status)

이 매크로가 참이라면 자식 프로세스가 비정상 종료했다는 뜻.

WTERMSIG(status)

SIFSIGNALED(status)매크로가 참일 경우 자식 프로세스를 종료시킨 시그널 번호를 얻는 매크로

WIFSTOPPED(status)

이 매크로가 참이면 자식 프로세스는 현재 멈춰있는(stopped) 상태이다. 다음에서 살펴볼 option인자에 WUNTRACED옵션이 설정되어 있는 경우 자식 프로세스의 멈춤 상태를 알아낼수 있다.

WSTOPSIG(status)

WIFSTOPPED(status)매크로가 참일 경우 자식 프로세스를 멈춤상태로 만든 시그널번호를 얻는다.

WCOREDUMP(status)

시스템에 따라서는 WIFSIGNALED(status)가 참일 경우 자식 프로세스가 core덤프 파일을 생성했는지를 확인하는 이 매크로를 제공해주기도 한다.

 

 

waitpid()에서 사용하는 pid인자값의 의미

pid의 값

세부사항

pid < -1

pid의 절대값과 동일한 프로세스 그룹ID의 모든 자식 프로세스의 종료를 기다린다.

pid == -1

모든 자식 프로세스의 종료를 기다린다.
만약 pid값이 -1이면 waitpid함수는 wait()함수와 동일하다.

pid == 0

현재 프로세스의 프로세스 그룹ID와 같은 프로세스 그룹ID를 가지는 모든 자식 프로세스의 종료를 기다린다.

pid > 0

pid값에 해당하는 프로세스 ID를 가진 자식 프로세스의 종료를 기다린다.

 

 

waitpid()에서 사용하는 option인자

인자

인자의 의미

WNOHANG

waitpid()를 실행했을 때, 자식 프로세스가 종료되어 있지 않으면 블록상태가 되지 않고 바로 리턴하게 해준다.

WUNTRACED

pid에 해당하는 자식 프로세스가 멈춤 상태일 경우 그 상태를 리턴한다.
즉 프로세스의 종료뿐 아니라 프로세스의 멈춤상태도 찾아낸다.

 

좀비 프로세스 (zombie process) : 자식 프로세스가 종료되었지만, 부모 프로세스가 아직 그 종료를 확인하지 않는 프로세스

고아 프로세스 : 자식보다 먼저 부모프로세스가 죽었을 경우의 자식 프로세스.

[출처] wait(), waitpid()|작성자 달마

 

반응형