[회전] 리 눅 스 의 좀 비 프로 세 스 가 무엇 입 니까?
프로 세 스 가 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 호출 을 사용 해 야 합 니 다.이 두 가지 역할 은 좀 비 프로 세 스 가 남 긴 정 보 를 수집 하 는 동시에 이 프로 세 스 를 완전히 사라 지게 하 는 것 이다.
---------------------------------------------------------------------
본문
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.