기술 · 실용 가이드
Linux에 defunct 좀비 프로세스가 보이나요? 종료 전에 부모와 wait 경계를 증명하세요
좀비는 이미 종료되었습니다. 정리를 소유하는 것은 살아 있는 부모, subreaper 또는 컨테이너 PID 1입니다. 자식과 부모의 신원을 고정한 뒤 하나의 안전한 회수 경계만 수정하세요.

좀비는 다시 kill 할 실행 중 작업이 아니라 부모나 reaper가 읽기를 기다리는 종료된 자식의 상태 기록입니다. 따라서 안전한 조사는 강한 신호가 아니라 부모 신원에서 시작합니다.
자식 PID와 시작 시각, 부모 PID와 시작 시각, 서비스 또는 컨테이너 경계, Z 상태 수 추세를 보존합니다. 실제 wait 소유자 하나만 고치고 원래 실행 경로에서 회수가 제한되는지 증명합니다.
1. 부모를 재시작하기 전에 기록을 고정하세요
전체 ps 출력, 자식과 부모 PID, 명령, 사용자, 컨테이너 또는 unit, 최초 시각, Z 수를 저장하고 /proc 시작 시각으로 PID 재사용을 구분합니다.
자식에 kill -9를 보내거나 모든 부모를 일괄 종료하지 마세요. 관련 없는 서비스를 중단할 수 있습니다.
2. 살아 있는 부모와 wait 경계를 증명하세요
같은 네임스페이스에서 Z와 PPID를 확인하고 부모를 실행 파일, 시작 시각, 서비스, supervisor, 배포에 연결합니다.
짧은 일시적 좀비는 정상일 수 있습니다. 비슷한 부하에서 안정되거나 증가하는 수가 지속 결함의 증거입니다.
3. PID 네임스페이스와 subreaper를 포함하세요
컨테이너 PID 1은 애플리케이션이나 작은 init이며 호스트 init과 다릅니다. Docker --init의 회수 책임을 기록합니다.
init을 추가해도 장수 부모의 잘못된 wait 루프가 자동으로 고쳐지지 않습니다.
4. 부모에 가장 작은 영향을 주는 수정을 선택하세요
소유한 프로그램이라면 모든 종료 자식을 회수하고 버스트와 오류 경로를 처리하도록 수명주기를 고칩니다.
서드파티 소프트웨어는 증거를 보존한 뒤 문서화된 재시작이나 업그레이드를 우선하며 의존성과 롤백을 모른 채 부모를 종료하지 않습니다.
5. 원래 실행 경로에서 제한된 회수를 확인하세요
같은 unit, 컨테이너 명령, supervisor 또는 wrapper로 작업을 반복하고 부모 신원과 Z 수를 고정 간격으로 측정합니다.
부모가 건강하고 종료 자식이 회수되며 Z 수가 기준으로 돌아오고 무관한 프로세스가 영향받지 않을 때만 완료합니다.
