이 름
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
이 것 은 멈 추 거 나 상 태 가 보 고 되 지 않 은 자 식 들 을 위 해 역 시 리 턴 하 라 는 의 미 이 다 .
만 일 status 가 NULL이 아 니 라 면 wait 또 는 waitpid 는 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 를 반 환 할 경 우 만 평 가 된 다 .
반 환 값
종 료 된 자 식 의 프 로 세 스 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 [AT] soback.net>
2000년 8월 7일
한 글 Manpage 프 로 젝
트 (http://man.kldp.org) 2005년 2월
11일