좀비 프로세스: Difference between revisions

From CS Wiki
(새 문서: ;부모 프로세스가 종료 되었는데도 불구하고 종료되지 않고 계속 남아있는 프로세스 리눅스에서 ps 명령어로 S(Status) 필드의 항목이 Z로 표...)
 
No edit summary
 
(One intermediate revision by one other user not shown)
Line 1: Line 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>

Latest revision as of 09:03, 17 February 2020

부모 프로세스가 종료 되었는데도 불구하고 종료되지 않고 계속 남아있는 프로세스

원인[edit | edit source]

  • 부모 프로세스의 오류로 인하여 종료한 자식 프로세스의 종료가 적절히 이루어지지 않음
  • 커널 오류에 의한 비정상적인 상태

좀비 프로세스 파악[edit | edit source]

  • top 명령어를 통해 좀비 프로세스의 수, 좀비 프로세스를 확인할 수 있다.
  • 개수: 두번째줄 마지막에 1 zombie를 통해 개수 확인
  • 프로세스: 프로세스 목록 중 두번째 S(Status)가 Z로 표시된 프로세스 확인
[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
  • 아래와 같은 명령어를 통해 간단히 개수만 확인할 수도 있다.
[root@itwiki ~]# top -b -n 1 | grep zombie
Tasks: 139 total,   1 running, 136 sleeping,   0 stopped,   2 zombie
  • ps와 grep명령어를 통해 프로세스를 특정해서 조회할 수 있다.
[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>

좀비 프로세스 죽이기[edit | edit source]

  • 아래 명령어를 통해 일괄적으로 좀비 프로세스를 죽일 수 있다.
ps -ef | grep defunct | awk '{print $3}' | xargs kill -9