क्या रिबूट के बिना एक ज़ोंबी प्रक्रिया को मारने का कोई तरीका है?


48

क्या रिबूट के बिना एक ज़ोंबी प्रक्रिया को मारने का कोई तरीका है? यहाँ है कि यह कैसे हुआ:

मैं धार का उपयोग करके एक 12GB फ़ाइल डाउनलोड करना चाहता हूं। .Torrent फ़ाइल को जोड़ने के बाद, ट्रांसमिशन एक ज़ोंबी प्रक्रिया में बदल गया (मैंने ktorrent को भी आज़माया। समान व्यवहार)। अंत में मैं couldTorrent का उपयोग करके फ़ाइल डाउनलोड कर सकता था लेकिन कार्यक्रम को बंद करने के बाद, यह एक ज़ोंबी में भी बदल जाता है।

मैं उपयोग करने की कोशिश kill, skillऔर pkillविभिन्न विकल्पों और साथ -9संकेत है, लेकिन कोई सफलता।

वेब पर कुछ समाधान पढ़ने के बाद, मुझे पता चला कि माता-पिता ज़ोंबी को मार सकते हैं। लेकिन शराब को मारने से भी मदद नहीं मिली।

क्या कोई और तरीका है?

संपादित करें:

ps -o pid, ppid, स्टेट, कॉम

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: मुझे लगता है कि मुझे कुछ मिला। मैंने लॉगआउट करने का प्रयास किया और यह संदेश देखा:

यहाँ छवि विवरण दर्ज करें

चूंकि अन्य टोरेंट क्लाइंट के पास एक ही मुद्दा है, शायद यह फ़ाइल साइज के बारे में कुछ है। मैं ubuntu 10.04 का उपयोग ext4 विभाजन पर कर रहा हूं। नॉटिलस को मारना और इसे SIGCHLD सिग्नल भेजना काम नहीं किया।


आप के उत्पादन को जोड़ सकते हैं ps -o pid,ppid,stat,commऔर pstreeअपने प्रश्न के लिए?
मिकेल

मुझे यहाँ भी यही समस्या हो रही है और गुगली करने के बाद ऐसा लगता है कि यह तब होता है जब स्थापना के दौरान आपके घर के फ़ोल्डर को एन्क्रिप्ट किया जाता है और टॉरेंट को 4 जीबी से बड़ा डाउनलोड करने का विकल्प चुनना होता है। मैं 99% सीपीयू खाने वाली ज़ोंबी प्रक्रिया से छुटकारा पाने के लिए रिबूट के अलावा कोई अन्य रास्ता नहीं ढूंढ पाया। Bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/431975 इससे निपटने के लिए लगता है लेकिन इसे हल करने के लिए बहुत कुछ नहीं किया गया लगता है :(
user972876

कृपया यहाँ भी पढ़ें: askubuntu.com/questions/48624/what-are-zombie-processes यह कई संदेहों को हल करने में मदद करेगा।
लुइस अल्वाराडो

जवाबों:


41

मैं बात नहीं करता ज़ोंबी प्रक्रिया एक सिरदर्द का ज्यादा है। एक ज़ोंबी प्रक्रिया किसी भी संसाधन को नहीं लेती है। यह सिर्फ इतना है कि यह प्रक्रिया तालिका में प्रविष्टि है।

एक ज़ोंबी प्रक्रिया एक अनाथ प्रक्रिया नहीं है, इसमें एक माता-पिता हैं।

kill, skill pkillकाम नहीं करेगा क्योंकि प्रक्रिया पहले ही मार दी गई है, बस यह कि प्रविष्टि को हटाया नहीं गया है।

SIGCHLDमाता-पिता को संकेत भेजकर ज़ोंबी प्रक्रिया को मारा जा सकता है । मुझे लगता है कि संकेत संख्या SIGCHLDहै 17या18

यदि यह भी विफल हो जाता है, तो आप स्वयं माता-पिता को मारना चाहते हैं।

SIGCHLD सिग्नल पर विकिपीडिया से:

जब माता-पिता को प्रतीक्षा करने से पहले एक बच्चे की प्रक्रिया समाप्त हो जाती है, तो कर्नेल प्रक्रिया के बारे में कुछ जानकारी रखता है ताकि उसके अभिभावक को बाद में प्रतीक्षा करने में सक्षम बनाया जा सके। क्योंकि बच्चा अभी भी सिस्टम संसाधनों का उपभोग कर रहा है, लेकिन इसे निष्पादित नहीं करना एक ज़ोंबी प्रक्रिया के रूप में जाना जाता है।


EDIT 1 : सिस्टम संसाधनों की खपत ज्यादातर प्रक्रिया तालिका प्रविष्टि है। अगर किसी को पता है कि यह उससे अधिक खपत करता है - मेमोरी या सीपीयू चक्र, तो कृपया एक स्पष्टीकरण जोड़ें। AFAIK यह शायद ही किसी भी महत्वपूर्ण सिस्टम संसाधनों को लेता है।


EDIT 2: विकिपीडिया से उद्धरण

यूनिक्स और यूनिक्स जैसी कंप्यूटर ऑपरेटिंग सिस्टम पर, एक ज़ोंबी प्रक्रिया या डिफंक्ट प्रक्रिया एक ऐसी प्रक्रिया है जिसने निष्पादन को पूरा किया है लेकिन अभी भी प्रक्रिया तालिका में एक प्रविष्टि है। इस प्रविष्टि को अभी भी उस प्रक्रिया को अनुमति देने के लिए आवश्यक है जिसने (अब ज़ोंबी) प्रक्रिया को इसकी निकास स्थिति को पढ़ने के लिए शुरू किया था।

इसलिए प्रविष्टि को रखा जाता है ताकि मूल प्रक्रिया से बाहर निकलने की स्थिति का पता चल सके क्योंकि बच्चा जिस क्षण बाहर निकलता है, माता-पिता संभवतः एक स्थिति में नहीं होते हैं या पढ़ने के लिए तैयार नहीं होते हैं यह बाहर निकलने की स्थिति है।


EDIT 3

आज तक मैंने कभी भी CPU प्रक्रिया का 100% लेने के लिए एक ज़ोंबी प्रक्रिया का अनुभव नहीं किया। इसे पहली बार देख रहे हैं।

ए करने की कोशिश करो killall utorrent.exe

मैं देख सकता हूं कि इसके दो उदाहरण हैं utorrent.exeऔर उनमें से एक ज़ोंबी है। संभवतः दूसरा (बच्चा)। किलॉल को माता-पिता को मार देना चाहिए क्योंकि बच्चे (ज़ोंबी) को नहीं मारा जा सकता है।


EDIT 4

ऐसा लगता है कि हत्यारे ने काम नहीं किया क्योंकि यह KILL के बजाय TERM सिग्नल दे रहा था।

कोशिश करें 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 ययय

EDIT 5

कृपया इस बैश कमांड द्वारा प्रक्रिया के जनक आईडी को खोजने का प्रयास करें

cat / proc / {defunctpid} / स्थिति | grep -i ppid

आपके मामले में है

cat / proc / 7298 / स्थिति | grep -i ppid

अगर आउटपुट आता है

पीपीपी: १

फिर दुख की बात है कि मुझे लगता है कि आप भाग्य से बाहर हैं। प्रक्रिया क्रमांक 1init से संबंधित है जिसके बिना आपका सिस्टम नहीं चल सकता है


2
आपने लिखा A zombie process does not take up any resourcesऔर उद्धृत किया the child is still consuming system resources ... it is known as a zombie process
मारार्टिनस

हाँ। मैंने यह स्पष्ट करने के लिए पोस्ट को अपडेट किया कि मेरा क्या मतलब है।
मनीष सिन्हा

7
ज़ोंबी प्रक्रिया पूरी तरह से मेरे सीपीयू कोर में से एक लेती है। उस कोर का उपयोग 100% पर है। तो यह केवल प्रक्रिया तालिका प्रविष्टि नहीं है। मैं प्रश्न में अतिरिक्त जानकारी जोड़ूंगा।
पद्रम

3
सीपीयू का उपयोग करने वाला एक ज़ोंबी पृष्ठभूमि थ्रेड हो सकता है। top -Hशीर्ष में प्रक्रियाओं के बजाय थ्रेड्स प्रदर्शित करने का उपयोग करने का प्रयास करें ।
ज़ैन लिंक्स

1
दोषपूर्ण प्रक्रियाओं के साथ बड़ी समस्या यह है कि वे अंततः उपयोग किए गए बंदरगाहों का उपयोग करते रहते हैं।
पिएत्रोवैस्मारा

10

killइस प्रक्रिया का उपयोग करना वास्तव में अप्रभावी है, क्योंकि प्रक्रिया पहले से ही मृत है; killज़ोंबी राज्य के लिए एक जीवित प्रक्रिया लाता है।

मूल प्रक्रिया प्रक्रिया के निकास कोड को लेने के लिए जिम्मेदार है; जब तक यह किया जाता है तब तक प्रक्रिया एक ज़ोंबी बनी हुई है। initप्रक्रिया किसी भी प्रक्रिया के निकास कोड लेने जाएगा और इसे फेंक, तो यह "अंतिम उपाय" जनक है कि किसी भी ज़ोंबी एक प्रत्यक्ष वंशज हैं कि साफ नहीं है।

ज़ोंबी प्रक्रिया के माता-पिता को मारना आमतौर पर प्रभावी होता है क्योंकि ज़ोंबी प्रक्रिया तब initमाता-पिता की प्रक्रिया के समाप्त होते ही अपने माता-पिता के रूप में प्रकट होती है (यानी माता-पिता की हत्या ने उस प्रक्रिया को ज़ोंबी में बदल दिया है, और दादा-दादी ने माता-पिता के निकास कोड को पढ़ लिया है , तो माता पिता वास्तव में चला गया है)। एक ज़ोंबी एक ज़ोंबी के लिए माता-पिता हो सकता है, इसलिए केवल माता-पिता को मारना पर्याप्त नहीं है, इसे स्वयं एक अन्य प्रक्रिया द्वारा एकत्र करने की आवश्यकता है।

ध्यान दें कि प्रक्रियाएं अपने पोते की सफाई के लिए कभी जिम्मेदार नहीं होती हैं - वे हमेशा 1 को माता-पिता के रूप में संसाधित करते हैं (यही कारण है कि डेमन लेखक कभी-कभी एक डबल कांटा का उपयोग करते हैं) और बीच में प्रक्रिया को समाप्त कर देते हैं ताकि बच्चे की प्रक्रिया को पूरी तरह से नष्ट कर दिया जा सके। शेल)

wineशायद मारने का कारण प्रभावी नहीं है क्योंकि यह वास्तव में ज़ोंबी प्रक्रिया का जनक नहीं था; बल्कि, "utorrent.exe" जो init का सीधा वंशज है। हालाँकि यह प्रक्रिया अभी भी सामान्य रूप से चल रही है, बस अपने कर्तव्यों की उपेक्षा कर रही है।


जानकारी के लिए धन्यवाद। लेकिन क्या समाधान है?
पेद्रम

1
वास्तविक माता-पिता की प्रक्रिया को मारना , यानी वह जो ज़ोंबी के लिए कॉलम ps wauxमें सूचीबद्ध है PPID
साइमन रिक्टर

जैसा कि आप देख सकते हैं कि pstree आउटपुट में "utorrent.exe" का कोई अभिभावक नहीं है।
पैद्राम

उस नाम के साथ दो प्रक्रियाएं हैं, जहां एक दूसरे का बच्चा है। मुझे संदेह है कि ज़ोंबी बच्चा है, जो सफाई के लिए माता-पिता को "utorrent.exe" प्रक्रिया को जिम्मेदार बना देगा; यदि आप उस प्रक्रिया को मार देते हैं, तो init माता-पिता को साफ कर देगा, जिसके बाद बच्चे को init पर reattached किया जाता है और तुरंत ही साफ कर दिया जाता है।
साइमन रिक्टर

किंडल उस स्थिति में काम नहीं करता था। मैंने अभी didn'tTorrent शुरू किया था और इसका कोई माता-पिता या बच्चा नहीं है, लेकिन इसे अभी तक नहीं मारा जा सका है। आउटपुट आउटपुट अपडेट किया गया है।
पेद्रम

3

हत्या, -9, आदि की तुलना में बहुत आसान तरीका:

1) कंसोल uTorrent के बजाय qBitorrent का उपयोग करें (मैं एक GUI संस्करण के लिए भी इंतजार कर रहा हूं और qBitorrent अनिवार्य रूप से है)।

2) यदि आप 11.04 या इसके बाद के संस्करण का उपयोग कर रहे हैं, तो alt + f2 (एक विशेष कमांड विंडो खोलता है), xkill टाइप करें और आपका माउस अब x है। उस प्रोग्राम पर क्लिक करें जिसे आप बंद करना चाहते हैं (UI = प्रक्रिया आईडी) और यह आपके लिए इसे मार देगा।

उन्नत टिप: जैसे कि मैं अपने G15 मैक्रो कीबोर्ड पर "xkill" के लिए एक कीबोर्ड शॉर्टकट बांधता हूं।


1

मेरे मामले में जब शराब लटकती है और मैं एक शॉटगन के साथ ज़ोंबी बच्चे को नहीं मार सकता, तो मैं करूंगा:

wineserver -kतब मैं "प्रक्रिया के पुत्र" को मारूंगा killall -9 Oblivion.exe(उदाहरण के लिए)

जो मुझे समझ में आता है उसके लिए वाइन्सर अपने सभी ज़ोंबी चिल्ड्स को एक संकेत भेजता है कि वे सभी मरने वाले हैं (क्योंकि आप जानते हैं कि बन्दूक के कारण) लेकिन कभी-कभी एक बच्चा खुद से सोचता है और तूफान से दुनिया को लेना चाहता है। इसलिए मैं अतिरिक्त killall -9या kill -9प्रक्रिया की आईडी के साथ करता हूं ।


यह या तो काम नहीं करता था। इसके अलावा ट्रांसमिशन और कोटोरेंट में भी यही समस्या है और उनका शराब से कोई लेना-देना नहीं है।
पेद्रम

मैं शराब के साथ भाग का उपयोग करने के बारे में उल्लेख कर रहा था कि शराब माता-पिता की शराब है और बच्चे का उपयोग करता है। वैसे भी आपने माता-पिता को एक संकेत भेजने की कोशिश की थी, जिससे यह पता चले कि इसका बच्चा एक ज़ोंबी है (कोई माता-पिता इसके लिए तैयार नहीं है)। उदाहरण के लिए:kill -s SIGCHLD ppid
लुइस अल्वारादो

इसके अलावा आपके पास किस प्रकार का हार्डवेयर है इसलिए यह पता लगाने में मदद कर सकता है कि एक ज़ोंबी अधिकतम संसाधनों का उपयोग कैसे कर सकता है।
लुइस अल्वाराडो

दुर्भाग्य से या तो काम नहीं करता है।
पेद्रम

मेरा प्रोसेसर कोर i7 860 है।
पैडरम

-4

मेरा अनुमान है कि आप SSD का उपयोग कर रहे हैं।

जब एक टोरेंट क्लाइंट में बड़े टोरेंट जोड़ते हैं, तो आपके द्वारा डाउनलोड किए जा रहे टोरेंट की "प्लेसहोल्डर" फाइलें वास्तव में डिस्क पर बनाई जाती हैं, लेकिन डाउनलोड प्रक्रिया के दौरान धीरे-धीरे भरने तक खाली रहती हैं।

एक सामान्य हार्ड डिस्क के साथ, डिस्क अड़चन है, और आप अपने डेस्कटॉप के बाकी हिस्सों के साथ एक प्रदर्शन समस्या नहीं देखेंगे।

हालांकि, एसएसडी का उपयोग करते समय, सीपीयू अड़चन है, और एप्लिकेशन दुर्घटनाग्रस्त हो जाता है (ग्रे हो जाता है)। यदि आप इसे थोड़ी देर के लिए छोड़ देते हैं, तो यह ठीक हो जाएगा और सब ठीक हो जाएगा। SSD में स्विच करने के बाद से यह मेरा अनुभव रहा है।

हत्या की प्रक्रियाओं के संबंध में, दूसरों ने मुझे सलाह से बेहतर सलाह दी है - किल सिग्नल का उपयोग आमतौर पर काम करता है, लेकिन मेरे पास एक अजीब है जो वर्षों से पुनरारंभ की आवश्यकता थी।


1
धन्यवाद, लेकिन मैं एक सामान्य हार्ड डिस्क का उपयोग कर रहा हूं।
पेद्रम

1
"हालांकि, एसएसडी का उपयोग करते समय, सीपीयू अड़चन है, और एप्लिकेशन क्रैश हो गया है (ग्रे हो जाता है)। यदि आप इसे थोड़ी देर के लिए छोड़ देते हैं, तो यह ठीक हो जाएगा और सब ठीक हो जाएगा।" उस स्थिति में, प्रक्रिया एक ज़ोंबी नहीं है। निर्बाध नींद में ज़ोंबी प्रक्रियाएं और प्रक्रियाएं एक ही चीज नहीं हैं। एक ज़ोंबी प्रक्रिया वास्तव में अब नहीं चल रही है, संसाधन नहीं लेता है (प्रक्रिया तालिका में एक प्रविष्टि को छोड़कर), और कभी भी जीवन में वापस नहीं आ सकता है।
एलिया कगन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.