최신판 |
당신의 편집 |
1번째 줄: |
1번째 줄: |
| [[분류:운영체제]][[분류:리눅스]] | | [[분류:운영체제]][[분류:리눅스]] |
| ;부모 프로세스가 종료 되었는데도 불구하고 종료되지 않고 계속 남아있는 프로세스 | | ;부모 프로세스가 종료 되었는데도 불구하고 종료되지 않고 계속 남아있는 프로세스 |
| | 리눅스에서 ps 명령어로 S(Status) 필드의 항목이 Z로 표기된 프로세스 |
|
| |
|
| == 원인 == | | == 원인 == |
| * 부모 프로세스의 오류로 인하여 종료한 자식 프로세스의 종료가 적절히 이루어지지 않음 | | * 부모 프로세스의 오류로 인하여 종료한 자식 프로세스의 종료가 적절히 이루어지지 않음 |
| * 커널 오류에 의한 비정상적인 상태 | | * 커널 오류에 의한 비정상적인 상태 |
|
| |
| == 좀비 프로세스 파악 ==
| |
| * top 명령어를 통해 좀비 프로세스의 수, 좀비 프로세스를 확인할 수 있다.
| |
| * 개수: 두번째줄 마지막에 1 zombie를 통해 개수 확인
| |
| * 프로세스: 프로세스 목록 중 두번째 S(Status)가 Z로 표시된 프로세스 확인
| |
| <pre class='shell'>
| |
| [root@itwiki ~]# top
| |
| top - 22:01:31 up 97 days, 17:08, 1 user, load average: 0.00, 0.00, 0.00
| |
| Tasks: 118 total, 3 running, 114 sleeping, 0 stopped, 1 zombie
| |
| Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
| |
| Mem: 1048576k total, 990160k used, 58416k free, 180060k buffers
| |
| Swap: 2031608k total, 48520k used, 1983088k free, 203936k cached
| |
|
| |
| PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
| |
| 1 root 15 0 10368 544 512 S 0.0 0.1 0:00.12 init
| |
| 2 root RT -5 0 0 0 Z 0.0 0.0 0:03.16 migration/0
| |
| 3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
| |
| 4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
| |
| </pre>
| |
|
| |
| * 아래와 같은 명령어를 통해 간단히 개수만 확인할 수도 있다.
| |
| <pre class='shell'>
| |
| [root@itwiki ~]# top -b -n 1 | grep zombie
| |
| Tasks: 139 total, 1 running, 136 sleeping, 0 stopped, 2 zombie
| |
| </pre>
| |
|
| |
| * ps와 grep명령어를 통해 프로세스를 특정해서 조회할 수 있다.
| |
| <pre class='shell'>
| |
| [root@itwiki ~]# ps -ef | grep defunct | grep -v grep
| |
| root 17107 21899 0 Feb25 ? 00:00:00 [myagent] <defunct>
| |
| testuser 21207 21205 0 Feb26 ? 00:00:00 [check_service.sh] <defunct>
| |
| </pre>
| |
|
| |
| == 좀비 프로세스 죽이기 ==
| |
| * 아래 명령어를 통해 일괄적으로 좀비 프로세스를 죽일 수 있다.
| |
| <pre class='shell'>
| |
| ps -ef | grep defunct | awk '{print $3}' | xargs kill -9
| |
| </pre>
| |