안녕하세요..좀비 프로세스 처리 관련하여 질문드립니다.^^
클라이언트에서 커넥션 갯수 만큼 fork()하여 자식프로세스를 생성하고 있습니다.
중간에 커넥션이 종료되면 자식프로레스는 종료가 되고, 다시 fork()하여 재접속하도록 구현되어있습니다.
부모 프로세스는 SIGCHLD 시그널에 대해 아래와 같이 시그널 핸들러를 설치하였습니다.
while (waitpid(-1, NULL, NOHANG) > 0){}
부모 프로세스가 종료되어야 할 상황이 발생하여 모든 자식 프로세스에 종료 시그널을 날렸고,
자식이 종료되어, SIGCHLD 시그널을 받아, 처리해주었습니다.
이때, 모든 자식 프로세스 갯수만큼 SIGCHLD 시그널을 받기 전에(종료 대기시간 초과),
exit(1) 를 호출하여 부모가 종료되어야 하나 hang이 걸리는 상황이 발생하였습니다.
strace로 확인해보니 아래와 같이 출력되었습니다.
futex(0x9ca8e88, FUTEX_WAIT_PRIVATE, 2, NULL)