WAIT4(2)

이름
wait3, wait4 - 프로세스 종료를 기다린다. BSD 스타일

사용법
#define _USE_BSD
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/wait.h>

pid_t wait3(int *status, int options,
      struct rusage *rusage)

pid_t wait4(pid_t pid, int *status, int options,
      struct rusage *rusage)

설명
wait3 함수는 자식이 종료될때 까지나 현재 프로세스를 종료시키거나 시그널 처리 함수를 호출하는 행동을 하는 신호가 전달될때까지 현재 프로세스의 실행을 일시 중지한다. 만일 자식이 호출 시간에 이미 종료되었다면(좀비 프로세스), 함수는 즉시 리턴한다. 자식이 사용한 시스템 자원들은 모두 풀어진다. wait4 함수는 pid 인자가 가리키는 자식이 종료될때까지나 현재 프로세스를 종료시키거나 시그널 처리 함수를 호출하는 행동을 하는 신호가 전달될때까지 현재 프로세스의 실행을 일시 중지된다. 만일 pid 로 지정된 자식이 호출 시간에 이미 종료되었다면(좀비 프로세스), 함수는 즉시 리턴한다. 자식이 사용한 시스템 자원들은 모두 풀어진다. pid 값은 다음 중 하나이다:

< -1
    이것은 프로세세 그룹 ID가 pid의 절대 값과 같은 어떤 자식 프로세스를 기다리라는 의미이다.

-1  이것은 어떤 자식 프로세스를 기다리라는 의미이다; 이것은 wait3호출과 같다.

0   이것은 프로세스 그룹 ID가 호출 프로세스의 ID와 같은 어떤 자식 프로세스를 기다리라는 의미이다.

> 0 이것은 프로세스 ID가 pid의 값과 같은 자식을 기다리라는 의미이다.

options 의 값은 0 이거나 다음 상수의 어떤것과 OR 이다.

WNOHANG
    이것은 어떤 자식도 종료되지 않았다면 즉시 리턴하라는 의미이다.

WUNTRACED
    이것은 멈추거나 상태가 보고되지 않은 자식들을 위해 역시 리턴하라는 의미이다.

만일 status 가 NULL이 아니라면 wait3 또는 wait4 는 status가 가리키는 위치에 상태 정보를 저장한다.

이 상태는 다음 매크로들로 평가된다.(이들 매크로는 인자로써 stat 버퍼 (int)를 가지고 있다. -- 버퍼에 대한 포인터가 아니다!)

WIFEXITED(status)
    가 non-zero 를 반환할때만 평가된다.

WEXITSTATUS(status)
    exit() 를 호출하기 위한 인자나 주 프로그램에서 return 문장을 위한 인자로써 설정되고 종료된 자식의 반환 코드의 최하위 8비트를 평가한다. 이 매크로는 WIFEXITED 가 non-zero 를 반환할때만 평가된다.

WIFSIGNALED(status)
    만일 자식 프로세스가 잡혀지지 않은 신호때문에 종료되었다면 참을 반환한다.

WTERMSIG(status)
    자식 프로세스를 종료하도록 야기한 신호의 숫자를 반환한다. 이 매크로는 만일 WIFSIGNALED 가 non-zero 를 반환할 경우만 평가된다.

WIFSTOPPED(status)
    반환의 원인이 된 자식 프로세스가 현재 정지되어 있다면 참을 반환한다.; 이것은 이 함수가 WUNTRACED를 사용했을때만 가능하다.

WSTOPSIG(status)
    자식을 정지하도록 야기한 신호의 숫자를 반환한다. 이 매크로는 WIFSTOPPED 가 non-zero 를 반환할 경우만 평가된다. 만일 rusage 가 NULL이 아니라면 <sys/resource.h> 에 정의되어 있는 struct rusage 구조체는 회계 정보를 채운다. 세부 사항을 위해서 getrusage(2) 를 참조해라.

반환값
종료된 자식의 프로세스 ID는 에러일때 -1이거나(특별히, 지정된 종류의 기다리지 않는 자식 프로세스들이 있지 않을때) 만일 WNOHANG 이 사용되고 어떤 자식도 이용할수 없다면 0을 반환한다. 나중 두 경우에 errno 는 적당한 값으로 설정된다.

에러

ECHILD
    지정된 자식 프로세스를 기다리지 않는 프로세스가 존재하지 않는다.

ERESTARTSYS
    만일 WNOHANG 가 설정되지 않고 신호가 봉쇄되지 않았거나 SIGCHLD 가 잡혔을때이다. 이 에러는 시스템 콜에서 반환된다. 라이브러리 인터페이스는 ERESTARTSYS를 반환할때 허용되지 않는다. 그러나 EINTR는 반환된다.

호환
SVr4, POSIX.1

관련 항목
signal(2), getrusage(2), wait(2), signal(7)

역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 8월 7일