본문 바로가기

욕심쟁이 공부방/AIX

zombie process

반응형

좀비 프로세스는 kill 시그널을 받아도 프로세스가 종료되지 않는다.
이미 현재 프로세스에 대한 모든 정보는 메모리에서 사라졌지만, 부모 프로세스가 정상적인 종료 처리를 하지 못해 발생한다.
좀비 프로세스에 대한 해결책은 리부팅.
리부팅이 되면 모든 메모리 정보가 새롭게 초기화되므로 좀비 프로세스에 대한 내용도 사라지게 된다.

참고로, 모든 프로세스는 일시적으로 좀비 상태를 거친 후 종료된다.

unix/linux의 모든 프로세스들은 작업을 완료하면 커널을 통해 종료사실을 부모프로세스에게 알린다.
이때 부모프로세스가 자식프로세스의 종료사실을 확인 해주어야 해당 프로세스가 정상적으로 종료할 수 있다.

부모 프로세스가 종료 사실을 확인할 때까지는 자식 프로세스는 일시적으로 좀비상태가 되는데, 이는 육안으로 식별 불가능할 정도로 순식간에 이루어진다.
따라서, 정상적인 상태라면 ps를 통해 프로세스 확인 시 Z상태(Zombie)를 보기가 쉽지 않다.
지속적으로 좀비상태가 나타난다면 이는 대부분 부모프로세스의 프로그램오류, 즉 시그널처리를 적절히 해주지 않았거나, 커널오류에 의한 비정상적인 상태일 확률이 높다.

애초에 생기지 않도록 하려면, 아래와 같이 해당 application들의 sigaction() 에 SIGCHLD를 무시하도록 수정하면 된다.


"The simplest solution is to modify the application so its sigaction subroutine ignores the SIGCHLD signal."

 

Zombie processes
A zombie process is a dead process that is no longer executing but is still recognized in the process table (in other words, it has a PID number). It has no other system space allocated to it. Zombie processes have been killed or have exited and continue to exist in the process table until the parent process dies or the system is shut down and restarted. Zombie processes display as <defunct> when listed by the ps command.
Zombie processes continue to exist in the process table until the parent process dies or the system is shut down and restarted. In the example shown above, the parent process (PPID) is the ksh command. When the Korn shell is exited, the defunct process is removed from the process table.
Sometimes a number of these defunct processes collect in your process table because an application has forked several child processes and has not exited. If this becomes a problem, the simplest solution is to modify the application so its sigaction subroutine ignores the SIGCHLD signal.

반응형

'욕심쟁이 공부방 > AIX' 카테고리의 다른 글

dumplv에 대하여  (0) 2018.11.26
ERROR LOGGING BUFFER OVERFLOW  (0) 2018.11.26
tcpdump 사용법  (0) 2018.11.26
rpc.rstatd  (0) 2018.11.26
FTP banner 변경하기  (0) 2018.11.26