← 질문 목록
#314깊이 0
좀비 프로세스는 왜 남는가?
자식이 어떻게 끝났는지를 부모가 물어볼 때까지 커널이 그 자리를 남겨 두기 때문이다.
실행
좀비
자식이 끝났는데 부모가 아직 안 거둔다
고아
부모가 먼저 죽는다
좀비
사라짐
부모가 wait으로 종료 상태를 가져간다
고아
사라짐
init이 입양해 대신 거둔다
좀비는 쓰던 메모리를 이미 내놓았다. 남는 것은 프로세스 표의 한 줄과 종료 상태, 그리고 그 번호다. 그래서 하나둘로는 표가 안 난다.
문제는 개수다. 프로세스 표에는 한도가 있어서 좀비가 계속 쌓이면 새 프로세스를 못 만든다. 자식을 많이 띄우는 서버에서 실제로 겪는 자리다.
고아는 좀비가 아니다. 부모가 먼저 죽은 것뿐이고 init이 입양해 거둬 준다. 오히려 부모가 살아서 방치할 때 남는다.
부모가 종료되면 좀비는 init 계열 프로세스가 거둔다. 좀비 자체는 이미 죽어서 신호를 받지 않는다.