[회전] 리 눅 스 의 좀 비 프로 세 스 가 무엇 입 니까?


      프로 세 스 가 exit 를 호출 한 후에 이 프로 세 스 는 바로 사라 지 는 것 이 아니 라 좀 비 프로 세 스 (Zombie) 라 는 데이터 구 조 를 남 긴 다 는 것 을 의식 하 는 사람 이 별로 없 을 것 이다.리 눅 스 프로 세 스 의 5 가지 상태 에서 좀 비 프로 세 스 는 매우 특수 한 것 입 니 다. 거의 모든 메모리 공간 을 포 기 했 습 니 다. 실행 가능 한 코드 도 없고 스케줄 링 도 할 수 없습니다. 프로 세 스 목록 에 하나의 위 치 를 유지 하고 이 프로 세 스 의 종료 상 태 를 기록 하 는 등 정 보 를 수집 할 수 있 습 니 다. 그 밖 에 좀 비 프로 세 스 는 더 이상 메모리 공간 을 차지 하지 않 습 니 다.
 
      좀 비 프로 세 스 의 이 유 는 유 닉 스 로 거 슬러 올 라 가 야 한다. 유 닉 스 디자이너 들 이 이 물건 을 디자인 한 것 은 한가 해서 멋 있 는 척 하고 싶 은 것 이 아니다.좀 비 프로 세 스 에는 프로그래머 와 시스템 관리자 에 게 매우 중요 한 정보 가 많이 저장 되 어 있 습 니 다. 우선 이 프로 세 스 는 어떻게 죽 었 습 니까?정상적으로 종료 되 었 습 니까? 오류 가 발생 했 습 니까? 아니면 다른 프로 세 스에 의 해 강제로 종료 되 었 습 니까?즉, 이 프로그램의 종료 코드 는 무엇 입 니까?그 다음 에 이 프로 세 스 가 차지 하 는 전체 시스템 의 CPU 시간 과 전체 사용자 의 CPU 시간 은 각각 얼마 입 니까?페이지 오류 가 발생 한 수 와 신 호 를 받 은 수 입 니 다.이 정 보 는 좀 비 프로 세 스 에 저 장 됩 니 다. 좀 비 프로 세 스 가 없 으 면 프로 세 스 가 얼마나 실 행 될 지 모 르 겠 습 니 다. 종료 되면 관련 된 모든 정 보 는 시스템 에서 제 거 됩 니 다. 이때 부모 프로 세 스 나 시스템 관리자 가 필요 하 다 면 눈 을 부 릅 뜨 고 볼 수 밖 에 없습니다.
 
      따라서 프로 세 스 가 종료 되면 시스템 은 이 프로 세 스 의 상 태 를 Zombie 로 바 꾸 고 부모 프로 세 스 가 종료 정 보 를 수집 하 기 를 기다 리 는 시간 을 줍 니 다. 부모 프로 세 스 가 다른 일 로 바 빠 서 수집 할 수 없 을 수도 있 기 때문에 Zombie 상 태 를 사용 하여 프로 세 스 가 종료 되 었 음 을 표시 하고 부모 프로 세 스 가 정 보 를 수집 하 기 를 기다 리 고 있 습 니 다.
Zombie 프로 세 스 는 kill 명령 을 사용 할 수 없습니다. 프로 세 스 가 종료 되 었 기 때문에 이러한 프로 세 스 를 제거 해 야 한다 면 부모 프로 세 스 를 제거 하거나 오 랜 시간 기 다 렸 다가 커 널 에서 제거 해 야 합 니 다.Zombie 프로 세 스 가 프로 세 스 ID 번 호 를 차지 하고 있 기 때문에 이러한 프로 세 스 가 많 으 면 시스템 프로 세 스 스케줄 링 에 불리 합 니 다.
다음은 예 시 를 살 펴 보 자.
 
 
/* zombie.c */
#include <sys/types.h>
#include <unistd.h>  main()
{
     pid_t pid; 
     pid=fork();
     if(pid<0) { /*      */ 
         printf(error occurred! );
    }else if(pid==0){ /*        */ 
         exit(0);
     }else{  /*        */ 
        sleep(60);  /*   60  */ 
         wait(NULL); /*        */
     }
}
 
 
이 프로그램 을 컴 파일 합 니 다:
 
 
$ cc zombie.c -o zombie
 
다음 명령 을 실행 할 수 있 도록 백 스테이지 프로그램 을 실행 합 니 다.
 
 
 
$ ./zombie &
 [1] 1217
 
시스템 내의 프로 세 스 를 열거 하 다
 
 
 
 $ ps -ax
 ... ...
 1137   pts/0   S   0:00   -bash
 1217   pts/0   S   0:00   ./zombie
 1218   pts/0   Z   0:00   [zombie]
 1578   pts/0   R   0:00   ps   -ax
 
      그 중의 'Z' 는 바로 좀 비 프로 세 스 의 표지 로 1218 번 프로 세 스 가 현재 좀 비 프로 세 스 임 을 나타 낸다.
Zombie 프로 세 스 의 정 보 를 수집 하고 이 좀 비 프로 세 스 를 종료 하려 면 부모 프로 세 스에 서 waitpid 호출 과 wait 호출 을 사용 해 야 합 니 다.이 두 가지 역할 은 좀 비 프로 세 스 가 남 긴 정 보 를 수집 하 는 동시에 이 프로 세 스 를 완전히 사라 지게 하 는 것 이다.
 
 
---------------------------------------------------------------------
본문

좋은 웹페이지 즐겨찾기