본문 바로가기
리눅스/리눅스 기초 과정

고스트 프로세스? 리눅스의 숨겨진 위협, 좀비 프로세스에 대처법

by 혼자왔서연 2023. 8. 3.
반응형

리눅스에서의 좀비 프로세스

리눅스 운영 체제에서 프로세스란 실행 중인 프로그램이나 작업을 의미합니다. 이러한 프로세스는 사용자가 프로그램을 실행하거나 시스템에서 필요한 작업을 수행할 때 생성됩니다. 하지만 때로는 프로세스가 종료된 후에도 완전히 사라지지 않고 남아있는 경우가 있습니다. 이러한 상태를 "좀비 프로세스"라고 합니다.

좀비 프로세스의 특징

좀비 프로세스는 이미 종료된 상태이지만, 해당 프로세스의 정보가 여전히 시스템 프로세스 테이블에 남아있는 상태입니다. 이러한 상태로 남아있는 프로세스는 자원을 소비하면서 시스템의 성능에 영향을 미칠 수 있습니다.

좀비 프로세스의 원인

좀비 프로세스가 생성되는 주요 원인은 부모 프로세스가 자식 프로세스의 종료 상태를 정리하지 않은 경우입니다. 부모 프로세스가 종료 상태를 정리하지 않으면 해당 자식 프로세스는 좀비 상태로 남게 됩니다.

 

부모프로세스와 자식 프로세스란?

더보기

부모 프로세스와 자식 프로세스는 리눅스 운영 체제에서 프로세스 간의 관계를 나타내는 개념입니다.

부모 프로세스:

  • 다른 프로세스를 생성하는 원본 프로세스로서, 새로운 프로세스를 생성할 때 사용됩니다.
  • 부모 프로세스가 생성한 자식 프로세스는 해당 프로세스의 부모로 지정됩니다.
  • 부모 프로세스가 종료되면 자식 프로세스들도 같이 종료됩니다.

자식 프로세스:

  • 부모 프로세스에 의해 생성된 새로운 프로세스를 의미합니다.
  • 부모 프로세스와 연결되어 있으며, 부모 프로세스의 자원과 메모리 공간을 공유합니다.
  • 자식 프로세스가 종료되더라도 부모 프로세스에는 영향을 미치지 않습니다.

이처럼 부모 프로세스와 자식 프로세스는 프로세스 간의 계층적인 관계를 형성하며, 여러 프로세스들이 연결되어 작업을 수행하는 리눅스 운영 체제에서 중요한 개념입니다. 부모 프로세스가 자식 프로세스를 생성하고 관리함으로써 리눅스 시스템은 여러 작업들을 동시에 처리할 수 있게 됩니다.

좀비 프로세스 확인 및 제거

 

실습

1. 좀비 프로세스 생성 

nano todayishot.c

1.A 아래 내용 붙여넣기

#include <stdlib.h>

#include <sys/types.h>

#include <unistd.h>

#include <sys/wait.h>



int main ()

{

  pid_t child_pid;



  child_pid = fork ();



  if (child_pid > 0) {

    // 부모 프로세스는 10초 후에 자식 프로세스의 상태를 확인하고 정리합니다.

    sleep(10);

    wait(NULL);

  }

  else {

    // 자식 프로세스는 바로 종료되어 좀비 프로세스가 됩니다.

    exit(0);

  }



  return 0;

}

1.B 빌드하기 

cc todayishot.c -o tomorrow

1,C 실행 

 ./tomorrow

 

좀비 프로세스를 확인하려면 터미널에서 다음과 같은 명령어를사용합니다.

top

우측에 1 zombie 생성확인

 

ps -ef | grep defunct | grep -v grep

 

위 명령어를 실행하면 현재 시스템에서 실행 중인 좀비 프로세스 목록을 확인할 수 있습니다.

 

자세한 설명 더보기 클릭 

더보기

ps -ef | grep defunct | grep -v grep 명령어는 리눅스 운영 체제에서 실행 중인 프로세스들 중에서 "defunct" 상태인 프로세스를 찾기 위해 사용하는 명령어입니다.

ps 명령어:

  • 시스템에서 실행 중인 프로세스들의 현재 상태를 보여주는 명령어입니다.
  • -ef 옵션은 모든 사용자의 모든 프로세스를 자세히(e), 트리 구조로(f) 보여줍니다.

grep 명령어:

  • 특정 키워드를 포함하는 텍스트를 검색하는 명령어입니다.
  • grep defunct는 "defunct"라는 키워드를 가진 프로세스들을 검색합니다.
  • grep -v grep는 "grep defunct" 자체를 검색 결과에서 제외시키는 역할을 합니다.

따라서 위의 명령어는 "ps -ef"로 모든 프로세스를 보고, 그 중에서 "defunct"라는 키워드를 가진 프로세스를 검색하되, "grep defunct" 자체는 검색 결과에서 제외하여 좀비 프로세스만을 정확하게 확인할 수 있도록 도와줍니다. 이를 통해 시스템에서 발생하는 좀비 프로세스를 쉽게 확인하고, 관리할 수 있습니다.

3481 자신의 pid  ,3480 은 부모의 pid

kill 3480

 

좀비 프로세스를 제거하기 위해서는 해당 프로세스의 부모 프로세스를 종료하면 됩니다. 부모 프로세스가 종료되면 시스템은 자동으로 해당 좀비 프로세스를 정리합니다.

좀비 프로세스 예방 방법

좀비 프로세스가 발생하는 것을 예방하기 위해서는 부모 프로세스가 자식 프로세스의 종료 상태를 정리하는 것이 중요합니다. 리눅스 마스터 시험에서도 출제된 문제입니다 . 그만큼 pc의 성능에 영향을 미치는 요소이므로 top,vmstat,ps -ef | grep defunct 명령어들을 항상 숙지하시길 바랍니다!

맺음말

리눅스에서는 프로세스의 관리가 중요한데, 그 중에서도 좀비 프로세스는 성능 저하자원 낭비의 원인이 될 수 있습니다. 따라서 사용자는 프로세스의 생성과 종료에 주의를 기울이고, 부모 프로세스가 자식 프로세스의 종료 상태를 정리하도록 유의해야 합니다. 이를 통해 좀비 프로세스를 예방하고 시스템의 안정성과 성능을 향상시킬 수 있습니다. 감사합니다.

반응형

Animated Rainbow Nyan Cat