용어집/문제가 생겼을 때

좀비 프로세스

다른 이름: defunct 프로세스, 종료된 프로세스

간단한 답

좀비 프로세스는 실행을 마쳤지만 상위 프로세스가 아직 종료 상태를 거둬 가지 않아 프로세스 테이블에 항목이 남아 있는 프로세스입니다. CPU를 쓰지 않고 메모리도 거의 차지하지 않습니다.

프로세스가 끝나면 시스템은 상위 프로세스가 어떻게 끝났는지 알 수 있도록 작은 기록을 남깁니다. 보통은 상위 프로세스가 곧바로 그 기록을 읽고 항목이 사라집니다. 상위 프로세스가 끝내 읽지 않으면, 끝난 프로세스가 좀비로 목록에 남습니다.

좀비가 몇 개 있는 것은 해롭지 않습니다. 수가 꾸준히 늘어난다면 상위 프로그램에 버그가 있다는 뜻입니다.

Mac에서 좀비 프로세스 찾는 방법

터미널에서 ps -axo pid,ppid,stat,comm | awk '$3 ~ /^Z/' 명령을 실행합니다. 각 줄이 좀비 하나이며, PPID 열에 그 좀비를 책임지는 상위 프로세스가 나옵니다.

좀비 프로세스를 없애는 방법

좀비는 이미 끝난 프로세스라서 끝낼 수 없습니다. 해결책은 상위 프로세스에 있습니다. 상위 앱을 종료하거나 다시 시작하면 좀비가 launchd로 넘어가고, launchd가 정리합니다.

좀비를 없애려고 launchd나 다른 시스템 프로세스를 종료하지 마세요. 상위 프로세스가 시스템 프로세스라면 Mac을 재시동하면 사라집니다.

좀비의 상위 프로세스 찾는 방법

ps의 전체 명령 열에서 좀비는 프로그램이 이미 끝났기 때문에 <defunct>로 표시됩니다. 손봐야 할 것은 상위 프로세스입니다.

  1. ps -axo pid,ppid,stat,comm | awk '$3 ~ /^Z/' 명령을 실행해 좀비를 나열합니다. STAT 열의 Z가 좀비를 뜻합니다.
  2. PPID 열의 번호를 적어 둡니다.
  3. ps -p <PPID> -o pid,user,command 명령을 실행해 어떤 프로그램이 상위 프로세스인지 확인합니다.
  4. 활성 상태 보기에서 보기 > 모든 프로세스(계층 표시)를 선택하면 같은 상위·하위 트리를 볼 수 있습니다.
  5. 상위 프로세스를 처리합니다. 직접 연 앱이라면 종료했다가 다시 엽니다. 터미널의 셸이나 스크립트라면 그 윈도우를 닫거나 스크립트를 멈춥니다. 시스템 프로세스라면 Mac을 재시동합니다.

정상인 경우와 걱정해야 할 경우

상위 프로그램은 wait 계열의 시스템 호출로 하위 프로세스의 종료 상태를 거둬 갑니다. 하위 프로세스를 시작만 하고 기다리지 않는 프로그램은 좀비를 남깁니다. 이는 상위 프로그램의 버그이며, 완전히 고칠 수 있는 것은 그 개발자뿐입니다.

좀비가 잠깐 보이는 것은 정상입니다. 프로세스가 끝난 순간부터 상위 프로세스가 종료 상태를 읽을 때까지만 존재하며, 이 시간은 보통 아주 짧습니다.

같은 상위 프로세스가 좀비를 많이 남겨 두거나, 몇 시간에 걸쳐 수가 계속 늘어난다면 살펴볼 만합니다. 개수를 세려면 ps -axo stat | grep -c '^Z' 명령을 실행하세요. Mac의 프로세스 제한을 보려면 sysctl kern.maxproc kern.maxprocperuid 명령을 실행하세요.

좀비, 고아, 멈춘 프로세스는 서로 다릅니다

이 세 용어는 자주 헷갈리지만, 해결 방법은 각각 다릅니다.

  • 좀비는 실행을 마친 프로세스입니다. 프로세스 테이블의 항목만 남아 있습니다.
  • 고아는 아직 실행 중이지만 상위 프로세스가 끝난 프로세스입니다. macOS는 이를 PID 1인 launchd에 넘기고, launchd가 새 상위 프로세스가 됩니다.
  • 멈춘 프로세스는 아직 실행 중이지만 꼼짝하지 않는 프로세스로, 활성 상태 보기에서 응답 없음으로 표시되는 경우가 많습니다. 좀비와 달리 종료하거나 강제 종료할 수 있습니다.

하지 말아야 할 일

좀비는 수가 적으면 해롭지 않으므로, 없애려고 위험을 감수할 이유가 없습니다.

  • 좀비의 PID에 kill -9 명령을 실행하지 마세요. 이미 끝난 프로세스라서 신호가 아무 효과도 없습니다.
  • 좀비를 없애려고 launchd나 다른 시스템 프로세스를 종료하지 마세요. 재시동하면 같은 일을 안전하게 할 수 있습니다.
  • 상위 프로세스가 무엇인지 확인하지 않고 종료하지 마세요. 문서가 열려 있는 앱이라면 먼저 작업을 저장하세요.

자주 묻는 질문

Mac의 좀비 프로세스란 무엇인가요?

실행을 마쳤지만 상위 프로세스가 종료 상태를 거둬 가지 않아 아직 목록에 남아 있는 프로세스입니다. CPU를 쓰지 않습니다.

좀비 프로세스는 어떻게 끝내나요?

직접 끝낼 수는 없습니다. ps의 PPID 열에 나오는 상위 프로세스를 종료하거나 다시 시작하면 좀비가 사라집니다.

좀비 프로세스는 해로운가요?

몇 개라면 해롭지 않습니다. 하나마다 프로세스 테이블의 자리를 하나씩 차지하므로, 수가 많고 계속 늘어나면 결국 문제가 생길 수 있으며 상위 프로그램에 버그가 있다는 뜻입니다.

kill -9로 좀비 프로세스를 없앨 수 없는 이유는?

좀비는 실행 중이 아니므로 신호가 멈출 대상이 없습니다. 상위 프로세스가 종료 상태를 거둬 가거나 상위 프로세스가 끝나야만 사라집니다.

Mac을 재시동하면 좀비 프로세스가 사라지나요?

네. 재시동하면 좀비와 그 상위 프로세스를 포함해 모든 프로세스가 끝납니다.

좀비 프로세스는 악성 코드의 신호인가요?

아닙니다. Unix 프로세스가 끝나는 방식의 정상적인 일부입니다. 한 상위 프로세스에서 좀비가 많이 나온다면 대개 그 프로그램에 버그가 있다는 뜻입니다.

관련 항목

Windows에서 넘어왔나요? Mac용 작업 관리자 또는 활성 상태 보기 대체 앱 추천을 확인하세요. 용어집의 모든 용어를 둘러봐도 좋습니다.