어떤 특정 프로세스가 자신의 일을 종료하였지만, 그 종료된 결과 또는 상태를 자신을 만들어준 parent process에게 보고 한 후 종료하려 하지만 그 parent 프로세스는 child 프로세스를 기다려주지 않을 경우 이 프로세스는 defunct 라는 모양으로 보여지게 됩니다. 즉 자신에게 주어진 모든 일을 완수는 하였지만, 무슨 이유에서건 (parent가 child보다 먼저 프로세스를 종료하고 없어진 경우, child로부터의 return값을 받기 위해 기다려 주지 않는 경우 등) 자신의 child process를 monitoring해 주지 않으면, 이 프로세스는 쉽게 말해 고아인 프로세스가 되어, 이 프로세스가 수행되기 위해 할당되었던 모든 환경들은 release 하였지만 프로세스 테이블로부터는 제거되지 않은 상태로 남게 된 프로세스를 말합니다. 이처럼 process가 만들어지는 것은 다음과 같이 크게 2가지 경우로 나누어 볼 수 있습니다.
|
1) 진짜 zombie process가 되어 버린 경우 |
어느 프로세스가 자신에게 주어진 모든 일을 완수하고 wait 시스템 콜을 사용하여 자신으로부터의 결과를 기다리는 parent 프로세스가 있으면 ps -l 에서 보여주는 결과에는 "Z" 상태에 있음을 보여 줍니다. 이런 경우에는 kill -18 (또는 kill -CLD)를 하여 프로세스를 없애 버릴 수 있으며, 만약 parent의 PID가 1번이 아니라면 parent 자체를 kill 함으로써 init 프로세스에게 zombie 프로세스를 clean up 시키도록 할 수 있습니다. 그러나 parent process의 PID 가 1 (init process)로 되어 버린 경우에는 kill 이 불가능 하므로 시스템을 reboot 하는 방법 밖에 없습니다.
|
2) 프로세스가 자신의 일을 종료는 하였지만 정상적으로 exit 또는 terminate 되지 못한 |
이 원인은 일반적으로 어떤 특정 디바이스와의 통신 중에 발생하며, 이는 드라이버 프로그램의 bug 이거나 통신선로 상의 데이터들이 XOFF만을 만나게 되어 flushing 되지 못했을 경우에 발생됩니다. 이런 상태에 있는 것들은 ps -l 에서 보면 "S" 상태에 있게 됩니다. 이럴 때는 (XON)를 보내거나, 현재 묶여져 있는 모든 프로세스들을 kill 시키고 새로운 getty 프로세스를 생성시킴으로써 hung up 현상을 제거 시킬 수 있는 경우도 있지만 원하는 결과가 나오지 않는 다면 시스템을 재시동(reboot) 시키는 방법 만이 있을 뿐입니다. [출처] Kill 명령으로도 종료되지 않는 프로세스 처리법|작성자 벨디 |
'UNIX > HP-UX' 카테고리의 다른 글
디렉토리 용량 체크 및 파일 개수 체크 (0) | 2013.08.20 |
---|---|
디스크 정보 확인 파일 및 명령어 (0) | 2013.08.20 |
HP-UX 성능 확인 (Performance) (0) | 2013.08.20 |
HP-UX Port Scan 방지 (0) | 2013.07.18 |