재부팅하지 않고 좀비 프로세스를 종료 할 수있는 방법이 있습니까?


48

재부팅하지 않고 좀비 프로세스를 종료 할 수있는 방법이 있습니까? 어떻게 된건 지

토런트를 사용하여 12GB 파일을 다운로드하고 싶습니다. .torrent 파일을 추가 한 후 전송은 좀비 프로세스로 바뀌 었습니다 (ktorrent도 시도했습니다. 같은 동작). 마지막으로 µTorrent를 사용하여 파일을 다운로드 할 수는 있지만 프로그램을 닫은 후에도 좀비로 변합니다.

나는 사용하여 시도 kill, skill그리고 pkill다른 옵션과 함께 -9신호하지만 성공.

웹에서 일부 솔루션을 읽은 후 부모를 죽이면 좀비를 죽일 수 있음을 알았습니다. 그러나 와인을 죽이는 것도 도움이되지 않았습니다.

다른 방법이 있습니까?

편집하다:

ps -o pid, ppid, stat, comm

PID  PPID STAT COMMAND
7121  2692 Ss   bash
7317  7121 R+   ps

pstree 출력 :

init─┬─GoogleTalkPlugi───4*[{GoogleTalkPlug}]
 ├─NetworkManager─┬─dhclient
 │                └─{NetworkManager}
 ├─acpid
 ├─amarok───19*[{amarok}]
 ├─apache2───5*[apache2]
 ├─atd
 ├─avahi-daemon───avahi-daemon
 ├─bonobo-activati───{bonobo-activat}
 ├─clock-applet
 ├─console-kit-dae───63*[{console-kit-da}]
 ├─cron
 ├─cupsd
 ├─2*[dbus-daemon]
 ├─2*[dbus-launch]
 ├─desktopcouch-se───desktopcouch-se
 ├─firefox───run-mozilla.sh───firefox-bin─┬─plugin-containe───8*[{plugin-contain}]
 │                                        └─14*[{firefox-bin}]
 ├─gconfd-2
 ├─gdm-binary─┬─gdm-simple-slav─┬─Xorg
 │            │                 ├─gdm-session-wor─┬─gnome-session─┬─bluetooth-apple
 │            │                 │                 │               ├─compiz───sh───gtk-window-deco
 │            │                 │                 │               ├─fusion-icon
 │            │                 │                 │               ├─gdu-notificatio
 │            │                 │                 │               ├─gnome-panel───{gnome-panel}
 │            │                 │                 │               ├─gnome-power-man
 │            │                 │                 │               ├─gpg-agent
 │            │                 │                 │               ├─gwibber-service
 │            │                 │                 │               ├─nautilus
 │            │                 │                 │               ├─nm-applet
 │            │                 │                 │               ├─polkit-gnome-au
 │            │                 │                 │               ├─2*[python]
 │            │                 │                 │               ├─qstardict───{qstardict}
 │            │                 │                 │               ├─ssh-agent
 │            │                 │                 │               ├─tracker-applet
 │            │                 │                 │               ├─trackerd
 │            │                 │                 │               ├─wakoopa─┬─wakoopa
 │            │                 │                 │               │         └─3*[{wakoopa}]
 │            │                 │                 │               └─{gnome-session}
 │            │                 │                 └─{gdm-session-wo}
 │            │                 └─{gdm-simple-sla}
 │            └─{gdm-binary}
 ├─6*[getty]
 ├─gnome-keyring-d───2*[{gnome-keyring-}]
 ├─gnome-screensav
 ├─gnome-settings-
 ├─gnome-system-mo
 ├─gnome-terminal─┬─bash───ssh
 │                ├─bash───pstree
 │                ├─gnome-pty-helpe
 │                └─{gnome-terminal}
 ├─gvfs-afc-volume───{gvfs-afc-volum}
 ├─gvfs-fuse-daemo───3*[{gvfs-fuse-daem}]
 ├─gvfs-gdu-volume
 ├─gvfsd
 ├─gvfsd-burn
 ├─gvfsd-computer
 ├─gvfsd-metadata
 ├─gvfsd-trash
 ├─hald─┬─hald-runner─┬─hald-addon-acpi
 │      │             ├─hald-addon-cpuf
 │      │             ├─hald-addon-inpu
 │      │             └─hald-addon-stor
 │      └─{hald}
 ├─indicator-apple
 ├─indicator-me-se
 ├─indicator-sessi
 ├─irqbalance
 ├─kded4
 ├─kdeinit4─┬─kio_http_cache_
 │          └─klauncher
 ├─kglobalaccel
 ├─modem-manager
 ├─multiload-apple
 ├─mysqld───10*[{mysqld}]
 ├─named───10*[{named}]
 ├─nmbd
 ├─notification-ar
 ├─notify-osd
 ├─polkitd
 ├─pulseaudio─┬─gconf-helper
 │            └─2*[{pulseaudio}]
 ├─rsyslogd───2*[{rsyslogd}]
 ├─rtkit-daemon───2*[{rtkit-daemon}]
 ├─smbd───smbd
 ├─snmpd
 ├─sshd
 ├─timidity
 ├─trashapplet
 ├─udevd───2*[udevd]
 ├─udisks-daemon─┬─udisks-daemon
 │               └─{udisks-daemon}
 ├─upowerd
 ├─upstart-udev-br
 ├─utorrent.exe───{utorrent.exe}
 ├─vnstatd
 ├─winbindd───2*[winbindd]
 ├─wnck-applet
 ├─wpa_supplicant
 └─xinetd

시스템 모니터와 상단은 좀비 프로세스가 리소스를 사용하고 있음을 보여줍니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

편집 2 : 뭔가 찾았습니다. 로그 아웃하려고했는데이 메시지를 보았습니다.

여기에 이미지 설명을 입력하십시오

다른 토런트 클라이언트는 동일한 문제가 파일 크기와 관련이 있기 때문에 ext4 파티션에서 우분투 10.04를 사용하고 있습니다. 노틸러스를 죽이고 SIGCHLD 신호를 보내는 것은 작동하지 않았습니다.


당신의 출력을 추가 할 수 ps -o pid,ppid,stat,commpstree귀하의 질문에를?
Mikel

나는 여기에 동일한 문제가 있으며 인터넷 검색 후 설치 중에 홈 폴더를 암호화하고 4GB보다 큰 급류를 다운로드 할 때 발생하는 것으로 보입니다. 99 % CPU를 먹는 좀비 프로세스를 제거하기 위해 재부팅 이외의 다른 방법을 찾지 못했습니다. bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/431975는 이 다루는 것처럼 보이지만 많은 것도이 :(를 해결하기 위해 수행 된 것으로 보인다
user972876

또한 여기를 읽으십시오 : askubuntu.com/questions/48624/what-are-zombie-processes 이것은 많은 의심을 해결하는 데 도움이됩니다.
Luis Alvarado

답변:


41

좀비 프로세스는 많은 두통이 아닙니다. 좀비 프로세스는 리소스를 차지하지 않습니다. 프로세스 테이블에 항목이 있다는 것입니다.

좀비 프로세스는 고아 프로세스가 아니며 부모가 있습니다.

kill, skill pkill프로세스가 이미 종료되었으므로 항목이 제거되지 않았기 때문에 작동하지 않습니다.

SIGCHLD부모에게 신호를 보내면 좀비 프로세스가 종료 될 수 있습니다 . 내가의 신호 번호가 생각 SIGCHLD입니다 17또는18

이것도 실패하면 부모 자체를 죽이고 싶을 수도 있습니다.

SIGCHLD 신호에 대한 Wikipedia에서 :

부모가 대기를 호출하기 전에 자식 프로세스가 종료되면 커널은 프로세스가 부모가 나중에 대기를 호출 할 수 있도록 프로세스에 대한 일부 정보를 유지합니다. 자식은 여전히 ​​시스템 리소스를 소비하지만 실행하지 않기 때문에 좀비 프로세스라고합니다.


편집 1 : 소비되는 시스템 리소스는 대부분 프로세스 테이블 항목입니다. 메모리 또는 CPU 사이클보다 더 많이 소비하는지 아는 사람이 있으면 설명을 추가하십시오. AFAIK는 중요한 시스템 리소스를 거의 차지하지 않습니다.


편집 2 : 위키 백과에서 인용

Unix 및 Unix와 유사한 컴퓨터 운영 체제에서 좀비 프로세스 또는 사용하지 않는 프로세스는 실행이 완료되었지만 프로세스 테이블에 여전히 항목이있는 프로세스입니다. 이 항목은 (현재 좀비) 프로세스를 시작한 프로세스가 종료 상태를 읽을 수 있도록 여전히 필요합니다.

따라서 자식이 종료되는 순간 부모가 상태에 있지 않거나 종료 상태를 읽을 준비가되지 않았기 때문에 부모 프로세스가 종료 상태를 알 수 있도록 항목이 유지됩니다.


편집 3

지금까지 나는 CPU의 100 %를 차지하는 좀비 프로세스를 경험하지 못했습니다. 처음으로 이것을 참조하십시오.

시도해보십시오 killall utorrent.exe

두 개의 인스턴스가 utorrent.exe있고 그 중 하나는 좀비임을 알 수 있습니다. 아마 두 번째 것 (자식). 자식 (좀비)을 죽일 수 없으므로 killall은 부모를 죽여야합니다.


편집 4

킬 대신 TERM 신호를 제공했기 때문에 killall이 작동하지 않은 것 같습니다.

사용해보십시오 killall --signal=KILL utorrent.exe

이것이 작동하지 않으면 프로세스를 선택적으로 종료하십시오.

utorrent.exe 프로세스 PID 목록 가져 오기

ps -e | grep -i utorrent

당신은 두 가지 과정을 받아야합니다

xxxx ?        aa:bb:cc utorrent.exe defunct
yyyy ?        aa:bb:cc utorrent.exe

두 번째는 부모입니다. 사용하여 죽여라

-9 yyyy 처치

편집 5

이 bash 명령으로 프로세스의 부모 ID를 찾으십시오.

cat / proc / {defunctpid} / status | grep -i ppid

당신의 경우에

고양이 / proc / 7298 / status | grep -i ppid

출력이 다음과 같은 경우

PPid : 1

슬프게도 나는 당신이 운이 없다고 생각합니다. 프로세스 ID 1는 시스템을 실행할 수없는 init에 속합니다.


2
당신은 쓰고 A zombie process does not take up any resources인용했습니다 the child is still consuming system resources ... it is known as a zombie process.
maaartinus

네. 내가 의미하는 바를 명확하게하기 위해 게시물을 업데이트했습니다.
Manish Sinha

7
좀비 프로세스는 내 CPU 코어 중 하나를 완전히 사용합니다.이 코어의 사용량은 100 %이므로 프로세스 테이블 항목뿐만 아니라 질문에 추가 정보를 추가합니다.
Pedram

3
CPU를 사용하는 좀비가 백그라운드 스레드를 실행 중일 수 있습니다. top -H프로세스 대신 스레드를 표시 하는 데 사용하십시오 .
Zan Lynx

1
사용하지 않는 프로세스의 주요 문제점은 결국 사용 된 포트를 계속 사용한다는 것입니다.
pietrovismara

10

kill프로세스가 이미 죽었 기 때문에 프로세스 자체에서 사용 하는 것은 실제로 효과가 없습니다. kill라이브 프로세스를 좀비 상태로 만듭니다.

상위 프로세스는 프로세스의 종료 코드를 선택합니다. 이 작업은 완료 될 때까지 좀비로 남아 있습니다. init프로세스는 프로세스의 종료 코드를 집어 던져 버릴, 그래서 직계 후손 인 모든 좀비를 정리합니다 "마지막 수단"부모 것이다.

좀비 프로세스의 부모를 죽이는 것은 부모 init프로세스가 사라지는 즉시 좀비 프로세스 가 부모로 되돌아 가기 때문에 일반적으로 효과적 입니다. 그래서 부모는 정말로 사라졌습니다). 좀비는 좀비의 부모가 될 수 있으므로 부모를 죽이는 것만으로는 충분하지 않으며 다른 프로세스 자체에서 수집해야합니다.

프로세스는 손자를 정리할 책임이 없습니다. 프로세스는 항상 부모로 프로세스 1로 되돌아갑니다 (따라서 데몬 작성자는 때때로 이중 포크 ()를 사용하고 프로세스를 중간에서 종료하여 하위 프로세스를 호출에서 완전히 분리시킵니다) 껍질)

살인 wine이 효과적이지 않은 이유 는 실제로 좀비 프로세스의 부모가 아니기 때문입니다. 오히려 "utorrent.exe"는 init의 직접적인 후손입니다. 그러나이 프로세스는 여전히 정상적으로 실행 중이며 의무를 무시하고 있습니다.


정보 주셔서 감사합니다.하지만 해결책은 무엇입니까?
Pedram

1
살인 실제 부모 프로세스를 하나의 즉 ps waux에 나열 PPID좀비에 대한 열을.
Simon Richter

pstree 출력에서 ​​볼 수 있듯이 "utorrent.exe"에는 부모가 없습니다.
Pedram

그 이름을 가진 두 가지 프로세스가 있는데, 하나는 다른 하나의 자식입니다. 좀비가 자식 인 것 같습니다. 그러면 부모 "utorrent.exe"프로세스가 정리를 담당하게됩니다. 해당 프로세스를 종료하면 init은 부모를 정리 한 후 자식을 다시 연결하여 즉시 정리합니다.
Simon Richter

이 경우 killall이 작동하지 않았습니다. 지금 µTorrent를 시작했으며 부모 또는 자식이 없지만 아직 죽일 수는 없습니다 .pstree 출력이 업데이트됩니다.
Pedram

3

killall, -9 등보다 훨씬 쉬운 방법 :

1) 콘솔 uTorrent 대신 qBitorrent를 사용하십시오 (GUI 버전을 기다리고 있으며 qBitorrent는 본질적입니다).

2) 11.04 이상을 사용하는 경우 alt + f2를 누르고 (특수 명령 창을 엽니 다) xkill을 입력하면 마우스는 이제 x입니다. 닫으려는 프로그램 (UI = 프로세스 ID)을 클릭하면 프로그램이 종료됩니다.

고급 팁 : G15 매크로 키보드와 마찬가지로 "xkill"에 대한 바로 가기 키를 바인딩하십시오.


1

내 경우 와인이 멈추고 샷건으로 좀비 아이를 죽일 수 없을 때 나는 할 것입니다 :

wineserver -k그런 다음 "프로세스의 아들"을 제거합니다 killall -9 Oblivion.exe(예 :

내가 이해하는 바에 따르면 와인 서버는 모든 좀비 차일드에게 모든 사람들이 죽을 것이라는 신호를 보냅니다. 그래서 내가 추가 할 killall -9또는를 kill -9프로세스의 ID로.


전송과 ktorrent 외에도 같은 문제가 있으며 와인과 관련이 없습니다.
Pedram

나는 와인과 함께 와인을 부모로 사용하고 아이를 utorrent하는 것에 대해 utorrent를 사용하는 것에 대해 언급하고있었습니다. 어쨌든 부모에게 자식을 좀비라고 알려주는 신호를 보내려고 했습니까 (부모가 준비되지 않은 것). 예를 들면 다음과 같습니다.kill -s SIGCHLD ppid
Luis Alvarado

또한 어떤 유형의 하드웨어가 있으므로 좀비가 리소스를 최대한 활용할 수 있는지 알아내는 데 도움이 될 수 있습니다.
Luis Alvarado

불행히도 작동하지 않습니다.
Pedram

내 프로세서는 코어 i7 860입니다.
Pedram

-4

내 생각에 당신은 SSD를 사용하고 있습니다.

토렌트 클라이언트에 큰 토렌트를 추가 할 때, 다운로드중인 토렌트의 "자리 표시 자"파일은 실제로 디스크에 작성되지만 다운로드 프로세스 중에 점진적으로 채워질 때까지 비어 있습니다.

일반 하드 디스크를 사용하면 디스크에 병목 현상이 발생하고 나머지 데스크톱에는 성능 문제가 발생하지 않습니다.

그러나 SSD를 사용할 때 CPU가 병목 상태이며 응용 프로그램이 중단 된 것처럼 보입니다 (회색으로 표시됨). 잠시 동안 방치하면 회복되고 모든 것이 잘됩니다. 이것은 SSD로 전환 한 이후의 경험이었습니다.

킬링 프로세스와 관련하여 다른 사람들은 필자가 할 수있는 것보다 더 나은 조언을 제공했습니다.


1
고맙지 만 일반 하드 디스크를 사용하고 있습니다.
Pedram

1
"SSD를 사용할 때 CPU는 병목 현상이며 응용 프로그램이 다운 된 것으로 보입니다 (회색으로 표시됨). 잠시 동안 그대로두면 복구되어 모든 것이 정상입니다." 이 상황에서 프로세스는 좀비가 아닙니다. 무정전 수면 상태의 좀비 프로세스와 프로세스 는 동일하지 않습니다. 좀비 프로세스는 더 이상 실제로 실행되지 않고 리소스를 차지하지 않습니다 (프로세스 테이블의 단일 항목 제외).
Eliah Kagan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.