CS(computer science)

linux - waitpid 뜯어보기

ebang 2023. 4. 18. 18:00
반응형
waitpid(pid_t pid, int *stat_loc, int options);

(linux manpage 를 번역 및 해석한 글입니다.)

 

 

<개요>

waitpid 함수는 wait 함수처럼 자식 프로세스를 기다릴 때 사용하는 함수이다. 즉 자식 프로세스의 종료상태를 회수할 때 사용한다. 하지만 waitpid 함수는, 자식 프로세스가 종료될 때까지 계속 기다리는 것이 아니라 세번째 인자인 옵션을 이용해서 원할 때 종료할 수 있다.

 

<헤더>

#include <sys/wait.h>

 

<인자들 분석>

pid : wait하고 싶은 child process를 pid 값으로 정할 수 있다.  pid 값이 -1이면,  아무 자식 프로세스를 기다린다. 

 

stat_loc : status를 저장하고 싶은 변수의 주소를 인자로 넘긴다.  (널도 넘길 수 있다.)

  • 종류가 매우 많다. 
  • child process 의 정보를 리턴하거나, true/false 형태의 정보를 리턴하는 것으로 구분할 수 있다. 
  • true or false 리턴하는 종류
    • WIFEXITED :  _exit(2), exit(3)으로 인해 프로세스가 종료되었을 때 참.
    • WIFSIGNALED : 시그널을 받아서 프로세스가 종료되었을 때 참.
    • WIFSTOPPED: 프로세스가 종료되지는 않았고 중단되었으며 다시 시작할 수 있을 때 참. 단,  WUNTRACED옵션이 켜져있고 자식 프로세스가 추적되고 있을 때 참이 될 수 있다. (ptrace(2) 참고)
  • child process의 정보를 리턴하는 종류
    • WEXITSTATUS :  WIFEXITED가 참이었다면, _exit(2) or exit(3)에 전달된 인자의 최하위 8비트를 검사한다.
    • WTERMSIG : WIFSIGNALED가 참이면, 프로세스의 종료를 일으킨 시그널의 개수를 검사한다. 
    • WCOREDUMP : WIFSIGNALED가 참이면, 프로세스의 종료가 (시그널을 받은 시점에서 process의 이미지를 갖고 있는 core file의 생성)과 함께 이루어졌는지 검사한다. 
    • WSTOPSIG: WIFSTOPPED가 참이면, 프로세스를 중단시킨 시그널의 개수를 검사한다. 

options :

  • WNOHANG option이 되어있다면, 기다리는 PID가 종료되지 않아서 즉시 종료 상태를 회수할 수 없는 상황에서 호출자는 block되지 않고 반환값으로 0을 받는다. 
  • WUNTRACED가 되어있다면, (SIGTTIN, SIGTTOU, SIGSTP 중단된 자식 프로세스의 상태를 반환받는다. 
  • WCONTINUED :  중단되었다가, 다시 시작한 자식 프로세스의 상태를 받는다. 

<반환 값>

자식 프로세스가 종료되거나 멈추어서 리턴하게 될 때는, 그 자식 프로세스의 process ID 가 반환받는다.

기다릴 자식이 없으면, -1이 리턴되고, errno는 ECHILD로 세트된다.

 

그렇지 않으면, WNOHANG이 옵션으로 명시되었고 멈추었거나  exit된 자식 프로세들이 하나도 없다면 0이 반환된다.

에러가 생겼거나 이 함수의 호출을 caught signal이 중단시켰다면, -1이 반환되고 errno가 그 에러에 맞게 세트된다.

 

 

 

반응형