# include <sys/wait.h>

  • wait
    • pid_t wait(int *statloc); 성공 : 프로세스 ID 반환 오류 : -1 부모 프로세스는 wait함수를 사용하여 자식 프로세스의 종료 상태를 얻을 수 있다. 다른 말로 wait함수를 사용하여 자식 프로세스가 종료 될때까지 기다릴 수 있다. wait() 함수는 아래와 같이 동작합니다. 1. 자식 프로세스가 동작 중이면 호출 차단이 차단되기 때문에 상태를 얻어올 때까지 대기 2. wait() 함수 호출자가 시그널을 받을 때까지 대기 3. 자식 프로세스가 종료된 상태라면 즉시 호출이 반환되어 상태를 얻음, 이 때 wait() 함수는 자식 프로세스의 프로세스 ID를 반환 4. 자식 프로세스가 없다면 호출이 즉시 반환되며, 에러값을 반환 매크로 설명- WIFEXITED(statloc) 자식 프로세스가 정상적으로 종료되었다면 TRUE WIFSIGNALED(statloc) 자식 프로세스가 시그널에 의해 종료되었다면 TRUE WIFSTOPPED(statloc) 자식 프로세스가 중단되었다면 TRUE WEXITSTATUS(statloc) 자식 프로세스가 정상 종료되었을 때 반환한 값
  • waitpid
    • pid_t waitpid(pid_t pid, int *statloc , int options); // 첫번째 인자 if (pid < -1) 프로세스 그룹 ID가 pid의 절댓값과 같은 자식 프로세스를 기다림 else if(pid == -1) 임의의 자식 프로세스를 기다림 else if (pid == 0) waitpid를 호출한 프로세스의 프로세스 그룹 PID와 같은 프로세스 그룹 ID를 가진 프로세스를 기다림 else if (pid > 0) 프로세스 ID가 pid인 자식 프로세스를 기다림 // 두번째 인자 if (자식 프로세스가 정상적으로 종료) waitpid 반환값 = 프로세스 id WIFEXITED(statloc) 매크로가 true를 반환 하위 8비트를 참조하여 자식 프로세스가 exit, _exit, _Exit에 넘겨준 인자값을 얻을 수 있음, WEXITSTATUS(statloc) else if(자식 프로세스가 비정상적으로 종료) waitpid 반환값 = 프로세스 id WIFSIGNALED(statloc) 매크로가 true를 반환 비정상 종료 이유를 WTERMSIG(statloc) 매크로를 사용하여 구할 수 있음 else if(waitpid 함수 오류) waitpid 반환값 = -1 ECHILD : 호출자의 자식 프로세스가 없는 경우 EINTR : 시스템 콜이 인터럽트 되었을 때 // 세번째 인자 if( options == WCONTINUED ) 중단 되었다가 재개된 자식 프로세스의 상태를 받음 else if( options == WNOHANG ) 기다리는 PID가 종료되지 않아서 즉시 종료 상태를 회수 할 수 없는 상황에서 호출자는 차단되지 않고 반환값으로 0을 받음 else if( options == WUNTRACED ) 중단된 자식 프로세스의 상태를 받음
  • wait3
    • pid_t wait3(int *statloc, int options, struct rusage *rusage); 자식 프로세스가 종료되는 것을 기다리며, 종료된 프로세스의 상태와 자원 사용량을 알려주는 함수이다.
  • wait4
    • pid_t wait4(pid_t pid, int *statloc, int options, struct rusage *rusage); 해당 pid 프로세스가 종료되는 것을 기다리며, 종료된 프로세스의 상태와 자원 사용량을 알려주는 함수이다.