Unix와 컴퓨터 운영체제와 같은 Unix에서, 좀비 프로세스 또는 Defunct 프로세스는 (시스템 호출 종료을 통해 이루어진) 종료가 되어도 프로세스 목록에 남아 있습니다. 이 현상은 부모 프로세스가 (시스템 호출 중단을 통해) 자식의 종료 상태를 알 필요가 있는 목록에서 자식 프로세스들에게 발생됩니다. 그렇게 좀비 프로세스를 목록에서 제거할 수 있었고, 이것을 "reaped"라고 합니다.
일반 프로세스들과 다르게, 좀비프로세스들은 이미 죽었기 때문에 Kill 명령어로 좀비프로세스들을 시스템에서 제거할 수 없습니다. (This is where the term's metaphor [zombie - an undead person] comes from.) 좀비 프로세스를 끄기 위해서, SIGCHLD
신호를 부모 프로세스에게 Kill 명령어로 보내야 한다. 만약, 부모 프로세스가 좀비 프로세스를 끄는 것을 방해하는 경우에, 부모 프로세스는 대부분 SIGTERM
신호로 종료할 수 있는 방법도 있다. 자식 프로세스가 부모 프로세스를 잃었을 때, init 프로세스(PID가 1번인 프로세스, 모든 프로세스의 조상 역할을 함.)가 자식 프로세스의 새로운 조상이 되고, 그것은 좀비 프로세스들을 시스템 호출 중단을 해서 끌 수 있습니다.
좀비 프로세스들은 다른 프로세스들에 영향을 끼치거나 시스템 자원을 사용하지 않기 때문에 해롭지 않습니다. 하지만, 그들은 프로세스 ID를 소유하고 있습니다. 이것은 모든 사용 가능한 PID를 좀비 프로세스가 차지하고 있다면 새로운 프로세스를 실행하는 것이 불가능 할 수 있습니다. Unix와 같은 시스템들에서는 프로세스 ID (/proc/sys/kernel/pid_max
)를 한정된 양(제 우분투에서는 32768이 최댓값이네요.)만 갖고 있습니다. 이것만이 좀비 프로세스가 일으킬 수 있는 문제점입니다. 좀비 프로세스의 다른 위험성은 만약 좀비 프로세스가 프로세스 목록에 오랫동안 머무른다면, 메모리 누수를 일으킬 수 있다는 것입니다. 이러한 문제 외에도, 적은 양의 좀비 프로세스는 그들의 부모 프로세스에 버그를 생성할 지라도 시스템에 큰 영향을 주지는 않을 것입니다.
zproc.c 파일을 컴파일 할 수 있고, 어떻게 좀비 프로세스가 생성되는지 확인할 수 있습니다.
cd example/ && gcc -O3 -Wall zproc.c -o zproc && ./zproc
특정 시간에 실행하고 있는 프로세스들의 정보의 리스트와 좀비 프로세스들을 표시하기 위해 zps를 만들었습니다. 이 프로그램은, 자동으로 좀비 프로세스들을 종료할 수 있습니다. 좀 더 자세한 정보를 보려면 사용법을 보세요. 기술적으로, zps는 /proc 파일 시스템에서 프로세스 정보를 얻어오고, 프로세스를 출력하고 신호를 보내고 이외의 다른 동작들을 하기 위해 C POSIX library를 이용합니다.
pacman -S zps
apk add zps
dnf install zps
mkdir -p build && cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=/usr
make
sudo make install
sudo ldconfig
make
sudo make install
수동 컴파일 시에는 런타임 어설션을 비활성화하려면 -DNDEBUG
도 전달하실 수 있습니다.
cd src/ && gcc -s -O3 -Wall -Wextra -pedantic zps.c -o zps
docker build -f docker/Dockerfile -t zps .
docker run zps
사용법:
zps [options]
옵션:
-v, --version 버전 보기
-h, --help 사용법 보기
-a, --all 모든 사용자 공간 프로세스 나열
-r, --reap 좀비 프로세스 종료하기
-s, --signal <sig> 좀비 부모에 사용할 신호
-p, --prompt 프로세스 선택을 위한 프롬프트 표시
-q, --quiet quiet 모드로 실행하기
-n, --no-color 색상 출력 비활성화
GNU General Public License v3.0 only (GPL-3.0-only)
Copyright © 2019-2024, Orhun Parmaksız
Translated to Korean by ahdelron.