좀비 프로세스란?

좀비 프로세스는 프로세스가 종료되었음에도 메모리 상에서 해당 프로세스에 대한 정보가 사라지지 않은 상태를 말합니다.


좀비 프로세스는 왜 생기는 걸까?

좀비 프로세스가 만들어지는 상황을 이해하기 위해, 호출된 자식 프로세스가 종료되는 경우를 살펴보겠습니다:

  • 인자를 전달하며 exit를 호출하는 경우
  • main 함수에서 return 문을 실행하여 값을 반환하는 경우

자식 프로세스 종료 후 처리

exit 함수와 return 반환 값은 모두 운영체제로 전달됩니다. 이 값은 자식 프로세스를 호출한 부모 프로세스에게 전달될 때까지 자식 프로세스를 소멸시키지 않습니다.

요약: 자식 프로세스는 작업을 종료했지만, 반환값이 부모 프로세스에게 전달되지 못하면 메모리 상에 좀비 프로세스로 남게 됩니다.


왜 부모 프로세스는 반환값을 요청하지 않을까?

운영체제가 반환값을 전달하지 않는 것이 아니라, 부모 프로세스가 운영체제에게 값을 요청해야 반환값이 전달됩니다. 만약 부모 프로세스가 값을 요청하지 못하는 상황이라면 좀비 프로세스가 생성됩니다.

테스트 예제

  • sleep 함수를 이용하여 좀비 프로세스를 생성하고 동작을 확인할 수 있습니다.

좀비 프로세스인지 확인하는 방법

ps -au 명령어를 사용하면 프로세스 정보를 확인할 수 있습니다:

  • -u: 지정된 사용자(UID)의 프로세스 정보를 출력합니다.
  • -a: 빈번히 사용되는 프로세스 정보를 출력합니다.

STAT 항목에서 Z가 표시되는 프로세스는 좀비 프로세스입니다.


좀비 프로세스의 소멸

부모 프로세스가 반환값을 요청

exit 함수 또는 return 반환 값이 부모 프로세스에게 전달되면 좀비 프로세스는 소멸됩니다. 이를 위해 부모 프로세스는 다음 방법을 사용합니다:

  1. wait 함수 호출
    • pid_t wait(int *statloc);
    • 이미 종료된 자식 프로세스가 있다면, 자식 프로세스가 종료되면서 전달한 값이 매개변수에 저장됩니다.
  2. 반환값 분리
    • 반환값 이외의 다른 정보도 포함되어 있으므로, 이를 분리하려면 다음 함수를 사용합니다:
      • WIFEXITED: 종료 여부 확인
      • WEXITSTATUS: 종료 상태 값 확인

좀비 프로세스는 부모 프로세스가 자식 프로세스의 종료 값을 요청하지 않을 때 발생합니다. 이를 방지하려면 wait 함수를 적절히 사용하고, 프로세스 관리에 주의를 기울여야 합니다.

Leave a Comment