열렬히.뛰기

wait() / waitpid()

école 42 > pipex > pipex : 시스템 콜 > wait() / waitpid()

🔎 wait() / waitpid()

c
#include <sys/wait.h>

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

wait() 함수는 OS가 자식프로세스가 완료될 때까지 부모 프로세스를 유지시켜 디먼 프로세스가 되는 것을 막고, 자식 프로세스의 종료를 담보해주는 역할을 한다.

동시에 자식 프로세스가 좀비 프로세스가 되는 것을 막기위해 사용한다.

자식프로세스가 종료돼도 부모프로세스가 진행중이면 자식프로세스는 반환값을 지닌채 좀비 프로세스상태로 대기하고 있다.

이 때 wait() 함수로 자식프로세스의 반환값을 받아주면 자식프로세스는 데이터를 넘겨주고 프로세스를 종료하게 된다.

좀비 프로세스?
프로세스는 종료되었지만 메모리 상에서 프로세스 정보가 유지되고 있는 상태다.
자식 프로세스에가 종료시 반환하는 인자값을 부모 프로세스가 받을 때까지
자식 프로세스는 프로세스 자원을 할당받은 상태로 남아있게 된다.

waitpid() 함수도 wait() 함수와 비슷하지만,

  • wait() 함수는 자식 프로세스 중 어느 하나라도 종료되면 프로세스 실행을 재개.

  • 반면 waitpid()는 특정 자식 프로세스가 종료될 때까지 부모 프로세스가 중단된다.

    또 WNOHANG 옵션을 사용하면 부모 프로세스가 자식 프로세스가 종료되지 않아도 다른 작업을 진행하는 것이 가능해진다.

또 wait함수와 달리 원하는 자식프로세스의 종료여부를 확인할 수 있고, 옵션을 사용해 자식프로세스의 exit status도 알 수 있다.