Linux 좀 비 프로 세 스

하나의 프로 세 스 가 exit 를 호출 한 후에 이 프로 세 스 는 바로 사라 지 는 것 이 아니 라 좀 비 프로 세 스 (Zombie) 라 는 데이터 구 조 를 남 긴 다 는 것 을 의식 하 는 사람 이 별로 없 을 것 이다.
리 눅 스 프로 세 스 의 5 가지 상태 에서 좀 비 프로 세 스 는 매우 특수 한 것 입 니 다. 거의 모든 메모리 공간 을 포 기 했 습 니 다. 실행 가능 한 코드 도 없고 스케줄 링 도 할 수 없습니다. 프로 세 스 목록 에 하나의 위 치 를 유지 하고 이 프로 세 스 의 종료 상 태 를 기록 하 는 등 정 보 를 수집 할 수 있 습 니 다. 그 밖 에 좀 비 프로 세 스 는 더 이상 메모리 공간 을 차지 하지 않 습 니 다.
좀 비 프로 세 스 의 이 유 는 유 닉 스 로 거 슬러 올 라 가 야 한다. 유 닉 스 디자이너 들 이 이 물건 을 디자인 한 것 은 한가 해서 멋 있 는 척 하고 싶 은 것 이 아니다.좀 비 프로 세 스 에는 프로그래머 와 시스템 관리자 에 게 매우 중요 한 정보 가 많이 저장 되 어 있 습 니 다. 우선 이 프로 세 스 는 어떻게 죽 었 습 니까?정상적으로 종료 되 었 습 니까? 오류 가 발생 했 습 니까? 아니면 다른 프로 세 스에 의 해 강제로 종료 되 었 습 니까?즉, 이 프로그램의 종료 코드 는 무엇 입 니까?그 다음 에 이 프로 세 스 가 차지 하 는 전체 시스템 의 CPU 시간 과 전체 사용자 의 CPU 시간 은 각각 얼마 입 니까?페이지 오류 가 발생 한 수 와 신 호 를 받 은 수 입 니 다.이 정 보 는 좀 비 프로 세 스 에 저 장 됩 니 다. 좀 비 프로 세 스 가 없 으 면 프로 세 스 가 얼마나 실 행 될 지 모 르 겠 습 니 다. 종료 되면 관련 된 모든 정 보 는 시스템 에서 제 거 됩 니 다. 이때 부모 프로 세 스 나 시스템 관리자 가 필요 하 다 면 눈 을 부 릅 뜨 고 볼 수 밖 에 없습니다.
따라서 프로 세 스 가 종료 되면 시스템 은 이 프로 세 스 의 상 태 를 Zombie 로 바 꾸 고 부모 프로 세 스 가 종료 정 보 를 수집 하 기 를 기다 리 는 시간 을 줍 니 다. 부모 프로 세 스 가 다른 일 로 바 빠 서 수집 할 수 없 을 수도 있 기 때문에 Zombie 상 태 를 사용 하여 프로 세 스 가 종료 되 었 음 을 표시 하고 부모 프로 세 스 가 정 보 를 수집 하 기 를 기다 리 고 있 습 니 다.
Zombie 프로 세 스 는 kill 명령 으로 지 울 수 없습니다. 프로 세 스 가 종료 되 었 기 때 문 입 니 다. 이 프로 세 스 를 지 우려 면 부모 프로 세 스 를 지 워 야 하거나 오래 기다 린 후에 커 널 에서 지 워 져 야 합 니 다.Zombie 프로 세 스 가 프로 세 스 ID 번 호 를 차지 하고 있 기 때문에 이러한 프로 세 스 가 많 으 면 시스템 프로 세 스 스케줄 링 에 불리 합 니 다.
다음은 예 시 를 살 펴 보 자.
#include 
#include  main()
{
   pid_t pid;
   pid=fork();
   if(pid<0) {          printf("error occurred!
"
);

   }else if(pid==0){          exit(0);
   }else{          sleep(60);          wait(NULL);
   }
}

이 프로그램 을 컴 파일 합 니 다:
  • $ cc zombie.c -o zombie

    다음 명령 을 실행 할 수 있 도록 백 스테이지 프로그램 을 실행 합 니 다.
    $ ./zombie &[1] 1217

    시스템 내의 프로 세 스 를 열거 하 다
    $ ps -ax
    ... ...1137   pts/0   S   0:00   -bash1217   pts/0   S   0:00   ./zombie1218   pts/0   Z   0:00   [zombie]1578   pts/0   R   0:00   ps   -ax

    그 중의 'Z' 는 바로 좀 비 프로 세 스 의 표지 로 1218 번 프로 세 스 가 현재 좀 비 프로 세 스 임 을 나타 낸다.
    Zombie 프로 세 스 의 정 보 를 수집 하고 이 좀 비 프로 세 스 를 종료 하려 면 부모 프로 세 스에 서 waitpid 호출 과 wait 호출 을 사용 해 야 합 니 다.이 두 가지 역할 은 좀 비 프로 세 스 가 남 긴 정 보 를 수집 하 는 동시에 이 프로 세 스 를 완전히 사라 지게 하 는 것 이다.
    원본: 
    https://coolshell.cn/articles/656.html

    좋은 웹페이지 즐겨찾기