NAME

wait3, wait4 - 프로세스 상태 변경 기다리기, BSD 방식

SYNOPSIS

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

pid_t wait3(int *wstatus, int options, struct rusage *rusage);
pid_t wait4(pid_t pid, int *wstatus, int options,
            struct rusage *rusage);

glibc 기능 확인 매크로 요건 (feature_test_macros(7) 참고):

wait3():
glibc 2.26부터:
_DEFAULT_SOURCE
|| (_XOPEN_SOURCE >= 500 &&
! (_POSIX_C_SOURCE >= 200112L
|| _XOPEN_SOURCE >= 600))
glibc 2.19부터 2.25까지:
_DEFAULT_SOURCE || _XOPEN_SOURCE >= 500
glibc 2.19 및 이전:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
wait4():
glibc 2.19부터:
_DEFAULT_SOURCE
glibc 2.19 및 이전:
_BSD_SOURCE

DESCRIPTION

이 함수들은 비표준이다. 새로 만드는 프로그램에서는 waitpid(2)waitid(2)를 사용하는 게 바람직하다.

wait3()wait4() 시스템 호출은 waitpid(2)와 비슷하되 추가로 rusage가 가리키는 구조체에 자식에 대한 자원 사용 정보를 반환한다.

rusage 인자 사용을 제외하면 다음 wait3() 호출은

wait3(wstatus, options, rusage);

다음과 동등하다.

waitpid(-1, wstatus, options);

마찬가지로 다음 wait4() 호출은

wait4(pid, wstatus, options, rusage);

다음과 동등하다.

waitpid(pid, wstatus, options);

다시 말해 wait3()는 아무 자식이나 기다리는 반면 wait4()를 쓰면 기다릴 특정 자식 내지 자식들을 선택할 수 있다. 더 자세한 내용은 wait(2)을 보라.

rusage가 NULL이 아니면 그 인자가 가리키는 struct rusage를 자식에 대한 사용량 정보로 채우게 된다. 자세한 내용은 getrusage(2)를 보라.

RETURN VALUE

waitpid(2)와 같음.

ERRORS

waitpid(2)와 같음.

CONFORMING TO

4.3BSD.

SUSv1에 wait3() 명세가 포함되었다. SUSv2에 wait3()가 포함되었지만 LEGACY로 표시되었다. SUSv3에서 제거되었다.

NOTES

<sys/time.h>를 포함시키는 것이 요즘은 필요하지 않지만 이식성을 높여 준다. (실제로 <sys/resource.h>에서 정의하는 rusage 구조체에는 <sys/time.h>에 정의돼 있는 struct timeval 타입 필드들이 있다.)

C 라이브러리/커널 차이

리눅스에서 wait3()wait4() 시스템 호출 위에서 구현한 라이브러리 함수이다.

SEE ALSO

fork(2), getrusage(2), sigaction(2), signal(2), wait(2), signal(7)


2021-03-22