wait

Autres langues

Langue: ko

Version: 1997년 6월 23일 (fedora - 25/11/07)

Section: 2 (Appels système)

이름

wait, waitpid - 프로세스 종료를 기다린다.

사용법

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

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

설명

wait 함수는 자식이 종료될때 까지나 현재 프로세스를 종료시키거나 시그널 처리 함수를 호출하는 행동을 하는 신호가 전달될때까지 현재 프로세스의 실행을 일시 중지한다. 만일 자식이 호출 시간에 이미 종료되었다면(좀비 프로세스), 함수는 즉시 리턴한다. 자식이 사용한 시스템 자원들은 모두 풀어진다. waitpid 함수는 pid 인자가 가리키는 자식이 종료될때까지나 현재 프로세스를 종료시키거나 시그널 처리 함수를 호출하는 행동을 하는 신호가 전달될때까지 현재 프로세스의 실행을 일시 중지된다. 만일 pid 로 지정된 자식이 호출 시간에 이미 종료되었다면(좀비 프로세스), 함수는 즉시 리턴한다. 자식이 사용한 시스템 자원들은 모두 풀어진다. pid 값은 다음 중 하나이다:
< -1
이것은 프로세세 그룹 ID가 pid의 절대 값과 같은 어떤 자식 프로세스를 기다리라는 의미이다.
-1
이것은 어떤 자식 프로세스를 기다리라는 의미이다; 이것은 wait 에서 나타난 것과 같은 행동을 한다.
0
이것은 프로세스 그룹 ID가 호출 프로세스의 ID와 같은 어떤 자식 프로세스를 기다리라는 의미이다.
> 0
이것은 프로세스 ID가 pid의 값과 같은 자식을 기다리라는 의미이다.

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

WNOHANG
이것은 어떤 자식도 종료되지 않았다면 즉시 리턴하라는 의미이다.
WUNTRACED
이것은 멈추거나 상태가 보고되지 않은 자식들을 위해 역시 리턴하라는 의미이다.

만일 statusNULL이 아니라면 wait 또는 waitpidstatus가 가리키는 위치에 상태 정보를 저장한다. 이 상태는 다음 매크로들로 평가된다.(이들 매크로는 인자로써 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 를 반환할 경우만 평가된다.

반환값

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

에러

ECHILD
만일 pid 로 지정된 프로세스가 존재하지 않거나 호출 프로세스의 자식이 아닐 경우 이다.(이것은 SIGCHLD 에 대한 행동이 SIG_IGN 으로 설정되었다면 자신의 자식을 위해 일어날수 있다.)
EINVAL
options 인자가 유효하지 않을 경우이다.
ERESTARTSYS
만일 WNOHANG 가 설정되지 않고 신호가 봉쇄되지 않았거나 SIGCHLD 가 잡혔을때이다. 이 에러는 시스템 콜에서 반환된다. 라이브러리 인터페이스는 ERESTARTSYS를 반환할때 허용되지 않는다. 그러나 EINTR는 반환된다.

주의

단일 유닉스 명세서는 SA_NOCLDWAIT 플래그가 설정되어 있거나 SIGCHLD에 대한 행동이 SIG_IGN(그러나 POSIX에서는 허용되지 않는다.)로 설정되어 있을 경우에 이 플래그(리눅스에서는 존재하지 않는다)를 기술한다. 그리고 종료된 자식들은 좀비가 되지 않으며 wait() 또는 waitpid() 함수의 호출은 모든 자식들이 종료될때까지 봉쇄될것이며 errno 를 ECHILD으로 설정하고 실패한다.

호환

SVr4, POSIX.1

관련 항목

signal(2), wait4(2), signal(7)

역자

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