wait(), waitpid() 옵션 별 사용 설명
출처 : http://blog.naver.com/dalmagru?Redirect=Log&logNo=70068719762
wait(), waitpid() : 부모 프로세스가 자식 프로세스가 종료했음을 확인하는 함수.
waitpid() : 인자로 프로세스ID를 받음으로써 특정 자식 프로세스의 종료를 기다릴수 있다.
함수원형
#include <sys/types.h> |
※ 자식 프로세스의 상태를 확인하는 매크로들
매크로 |
세부사항 |
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 == 0 |
현재 프로세스의 프로세스 그룹ID와 같은 프로세스 그룹ID를 가지는 모든 자식 프로세스의 종료를 기다린다. |
pid > 0 |
pid값에 해당하는 프로세스 ID를 가진 자식 프로세스의 종료를 기다린다. |
※ waitpid()에서 사용하는 option인자
인자 |
인자의 의미 |
WNOHANG |
waitpid()를 실행했을 때, 자식 프로세스가 종료되어 있지 않으면 블록상태가 되지 않고 바로 리턴하게 해준다. |
WUNTRACED |
pid에 해당하는 자식 프로세스가 멈춤 상태일 경우 그 상태를 리턴한다. |
※ 좀비 프로세스 (zombie process) : 자식 프로세스가 종료되었지만, 부모 프로세스가 아직 그 종료를 확인하지 않는 프로세스
※ 고아 프로세스 : 자식보다 먼저 부모프로세스가 죽었을 경우의 자식 프로세스.
[출처] wait(), waitpid()|작성자 달마