(1) wait() 함수
 : 자식 프로세스가 종료된 다음에 자식 프로세스의 종료 상태를 가져올 때까지 부모 프로세스는 기다린다.

○ 함수원형

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

pid_t wait(int *status);

○ status : 자식프로세스가 종료될 때의 상태 정보가 저장된다.
- 정상종료 : status의 하위 8비트에는 0이 저장되며, 상위 8비트에는 프로세스가 종료되게 한 exit()함수의 인수가 저장된다.
- 비정상 종료 : status의 하위 89비트에는 프로세스를 종료시킨 시그널의 번호가 저장되며, 상위 8비트에는 0이 저장된다.

○ 리턴값
- 성공 시 : 자식 프로세스가 종료되면서 반환되는 값
- 실패 시 : -1

○ 상태 확인하는 매크로



○ 예제소스



○ 결과확인
 


(2) waitpid() 함수
: 특정 프로세스가 종료 되기를 기다리도록 지정할 수 있고, wait() 함수와 다르게 부모 프로세스와 자식 프로세스 모두 각자 할 일을 할 수 있도록 설정할 수 있다.

○ 함수원형

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

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

○ 인자 값
- pid : 자식 프로세스의 ID. 아래 설명 참조.
- status : wait() 함수와 같은 역할. (필요 없을 시 NULL)
- option : WNOHANG 입력 시 부모 프로세스는 기다리지 않도록 설정, 0 입력 시 wait()함수와 같이 자식 프로세스의 종료를 기다린다.

○ waitpid()에서 사용하는 pid인자값의 의미
- pid < -1 : pid의 절대값과 동일한 프로세스 그룹ID의 모든 자식 프로세스의 종료를 기다린다.
- pid == -1 : 모든 자식 프로세스의 종료를 기다린다. 만약 pid값이 -1이면 waitpid함수는 wait()함수와 동일하다.
- pid == 0 : 현재 프로세스의 프로세스 그룹 ID와 같은 프로세스 그룹 ID를 가지는 모든 자식 프로세스의 종료를 기다린다.
- pid > 0 : pid값에 해당하는 프로세스 ID를 가진 자식 프로세스의 종료를 기다린다.

○ 예제소스



○ 결과화면



* 좀비 프로세스 : 자식 프로세스가 종료 되었지만, 부모 프로세스가 아직 그 종료를 확인하지 않는 프로세스
* 고아 프로세스 : 자식보다 먼저 부모 프로세스가 죽었을 경우의 자식 프로세스.

by 민트앤라떼 2012. 5. 22. 15:44