Simple echo client and server
zombie state
부모 프로세스를 종료하기 전에 좀비 proc를 지우려면 wait() 또는 waitpid()를 호출해야 합니다.
서버에서 중단된 시스템 호출 처리
→ 사용자가 해결해야 하는 문제
wait
and waitpid
Functions#include<sys/wait.h>
pid_t wait(int *statioc);
pid_t waitpid(pid_t pid, int *statioc, int options);
// both return; process ID if OK, 0 or -1 on error
wait()
는 첫번째의 자손이 종료될 때까지 블록시킨다.
waitpid()
은 더 많은 컨트롤을 할 수 있게 한다.
exit()가 호출되고 클라이언트가 종료되면 5개의 conns를 모두 닫고 5개의 자식을 모두 종료합니다.
좀비 프로세스의 남아 있는 이유
correct solution is call waitpid()
void sig_chid(int signo)
{
pid_t pid;
int stat;
while ( (pid = waitpid(-1, &stat, WNOHANG) ) > 0)
printf("child %d terminated\\n", pid);
return;
}