wait 함수란?


<aside> 💡 wait() 자식 프로세스가 종료될 때까지 대기한다. 자식 프로세스가 종료가 될 때까지 블록킹한다.

</aside>

주로 fork()를 이용해서 자식 프로세스를 생성했을 때 사용한다.

wait()를 사용하면 자식 프로세스가 종료할 떄까지 해당 영역에서 부모 프로세스가 sleep() 모드로 기다리게 된다. 이는 자식 프로세스와 부모 프로세스의 동기화를 위한 목적으로 부모 프로세스가 자식 프로세스보다 먼저 종료되어 자식 프로세스가 고아 프로세스(PPID가 1)인 프로세스가 되는 걸 방지하기 위한 목적이다.

만약 자식 프로세스가 종료되었다면 함수는 즉시 리턴되며, 자식이 사용한 모든 시스템 자원을 해제하낟.

그런데 어떤 이유로 부모가 wait()를 호출하기 전에 자식 프로세스가 종료해버리는 경우가 있다. (잘못된 메모리 연산 등으로 인한 죽음, 혹은 정상적으로)

이 경우에는 자식 프로세스가 좀비 프로세스가 되는데, wait() 함수는 즉시 리턴하도록 되어 있다.

wait()의 인자인 status를 통하여 자식 프로세스의 상태를 받아올 수 있는데, 자식 프로세스의 상태값은 자식 프로세스의 종료값 * 255(FF) 이다.

종료된 자식의 프로세스의 ID는 에러일 경우 -1 그렇지 않을 경우 0을 반환한다.

wait()


자식 프로세스 작업이 끝날 때까지 대기하며, 자식 프로세스가 종료한 상태를 구한다. wait() 함수를 실행하면 자식 프로세스가 종료될 때까지 대기하게 된다.

만일 자식 프로세스가 종료하여 main()에서 return으로 값을 반환하거나, 또는 exit()로 값을 반환하며 정상 종료했다면 wait(int *status)에서 status의 변수 값의 상위 2번째 바이트에 반환값을 저장한다.

또는 어떤 시그널에 의해 종료되었다면 최하위 바이트에 시그널 번호가 저장된다.