माता-पिता के साथ <ढ्डह्म> प्रक्रिया को कैसे मारना है


17

मैं रेडहैट बॉक्स पर बकुला को चला रहा हूं। समय-समय पर, भंडारण डेमॉन बेकुला-एसडी काम करना बंद कर देता है और बन जाता है <defunct>

[root@backup ~]# ps -ef | grep defunct | more
root      4801 29261  0 09:25 pts/5    00:00:00 grep defunct
root      5825     1  0 Oct18 ?        00:00:00 [bacula-sd] <defunct>

मेरा सवाल यह है कि मैं इस प्रक्रिया को कैसे मार सकता हूं? इसका जनक 1 है, जो कि एक अयोग्य है, जहाँ तक मुझे पता है, और मैं इनिट प्रक्रिया को मारना नहीं चाहूंगा, क्या मैं?

'आम तौर पर' इस प्रक्रिया को मारने से काम नहीं होता है:

[root@backup ~]# kill -0 5825
[root@backup ~]# kill -9 5825

मदद बहुत सराहना की है!

संपादित करें: चल रहा है

[root@backup ~]# lsof -p 5825

निम्नलिखित उत्पादन का उत्पादन:

COMMAND    PID USER   FD   TYPE  DEVICE     SIZE    NODE NAME
bacula-sd 5825 root  cwd    DIR   253,0     4096 3801089 /root
bacula-sd 5825 root  rtd    DIR   253,0     4096       2 /
bacula-sd 5825 root  txt    REG   253,0  2110599  368004 /usr/local/sbin/bacula-sd
bacula-sd 5825 root  mem    REG   253,0    75284  389867 /usr/lib/libz.so.1.2.3
bacula-sd 5825 root  mem    REG   253,0    46680 3604521 /lib/libnss_files-2.5.so
bacula-sd 5825 root  mem    REG   253,0   936908  369115 /usr/lib/libstdc++.so.6.0.8
bacula-sd 5825 root  mem    REG   253,0   125736 3606807 /lib/ld-2.5.so
bacula-sd 5825 root  mem    REG   253,0  1602128 3606885 /lib/libc-2.5.so
bacula-sd 5825 root  mem    REG   253,0   208352 3606892 /lib/libm-2.5.so
bacula-sd 5825 root  mem    REG   253,0   125744 3606887 /lib/libpthread-2.5.so
bacula-sd 5825 root  mem    REG   253,0    25940 3604573 /lib/libacl.so.1.1.0
bacula-sd 5825 root  mem    REG   253,0    15972 3604535 /lib/libattr.so.1.1.0
bacula-sd 5825 root  mem    REG   253,0    46548 3606908 /lib/libgcc_s-4.1.2-20080102.so.1
bacula-sd 5825 root  mem    REG   253,0 56422480  366368 /usr/lib/locale/locale-archive
bacula-sd 5825 root    0r   CHR     1,3             1545 /dev/null
bacula-sd 5825 root    1r   CHR     1,3             1545 /dev/null
bacula-sd 5825 root    2r   CHR     1,3             1545 /dev/null
bacula-sd 5825 root    3u   CHR   9,128             6469 /dev/nst0
bacula-sd 5825 root    4u  IPv4 1023380              TCP backup:bacula-sd (LISTEN)
bacula-sd 5825 root    5u  IPv4 2693268              TCP backup:bacula-sd->backup:53957 (CLOSE_WAIT)
bacula-sd 5825 root    7u  IPv4 3248683              TCP backup:bacula-sd->backup:57629 (CLOSE_WAIT)
bacula-sd 5825 root    8u  IPv4 3250966              TCP backup:bacula-sd->backup:37650 (CLOSE_WAIT)
bacula-sd 5825 root    9u  IPv4 3253908              TCP backup:bacula-sd->backup:37671 (CLOSE_WAIT)

जवाबों:


18

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

यह बहुत ज्यादा आपको दो विकल्पों के साथ छोड़ देता है।

  • मैन्युअल रूप से प्रक्रिया तालिका को संशोधित करें, जैसे। एक डमी प्रक्रिया बनाएं, डमी के बच्चे के रूप में दोषपूर्ण प्रक्रिया को लिंक करें, फिर उन्हें मार डालें। काफी खतरनाक है, और आपको मैन्युअल रूप से अन्य प्रक्रिया संसाधनों जैसे कि सेमाफोर और फ़ाइल हैंडल को साफ करना पड़ सकता है।
  • सिस्टम को रिबूट करें।

मैं दूसरे के साथ जाऊँगा।


2
+1। हालाँकि, ऐसा करने में कोई जल्दबाजी नहीं है, जब तक कि अधिक ज़ोंबी प्रक्रियाएं दिखाई नहीं दे रही हैं, या आपकी ज़ोंबी प्रक्रिया ने आपके रैम के 4 जी को लॉक नहीं किया है। :)
काइल स्मिथ

1
"चूंकि माता-पिता init (pid 1) है, जो आपके सिस्टम को भी नीचे ले जाएगा" - आप मार नहीं सकते initक्योंकि इसमें SIGKILL के लिए सिग्नल हैंडलर नहीं है। देख लो man 2 kill
Cawflands

आप पहले कैसे करते हैं?
स्केरिट

@AndrewH मुझे यकीन नहीं है कि SIGKILL लक्ष्य प्रक्रिया में एक सिग्नल हैंडलर पर निर्भर करता है, लेकिन यह सच है कि विशिष्ट कर्नेल एक SIGKILL init को अनदेखा करेगा। हालांकि, क्या आपको कर्नेल पैनिक को ट्रिगर करने के लिए कूलर के तरीकों से बाहर निकलना चाहिए, मुझे लगता है कि आप पाएंगे कि अधिकांश लिनक्स सिस्टम पर एक SIGSEGV काफी अच्छी तरह से करेगा।
रॉय

1
यह ध्यान दिया जाना चाहिए कि initजॉब्स में से एक जॉम्बी जॉम्बी प्रोसेस को रिप्लेस करना है, इसलिए यदि आप लंबे समय तक इंतजार करते हैं तो जॉम्बी प्रोसेस initको क्लीन करना चाहिए। हालांकि, सबसे initरों का हैंडलर स्थापित करना चाहिए SIGCHLDहोने के लिए SIG_IGN जो इस करता है।
साइफर

3

आप init को पुनः आरंभ करने का प्रयास कर सकते हैं:

 # telinit u

अन्यथा, मैं बहुत ज्यादा चिंता नहीं करता। यह नहीं चल रहा है और यह कोई संसाधन नहीं ले रहा है और यह सिर्फ इतना है कि कर्नेल इसे याद रख सकता है।


1
ठीक है, मुझे चिंता करनी होगी। यह एक बैकअप (बकुला) और वीओआइपी (तारांकन) सेवाएं चलाने वाली मशीन है। जब तक डिफाल्ट बकुला-एसडी प्रक्रिया है, तब तक बकुला टेप ड्राइव को एक्सेस नहीं कर सकती ...
andreas-h

यह किसी भी फाइल को खुला नहीं होना चाहिए। Lsof -p 5825 चलाएं और जांचें।
डेविड पैस्ले

खैर, लगता है कि कई चीजें खुली हैं ... ऊपर देखें। कोई भी विचार जो मैं कर सकता हूं? मैंने कभी भी lsof का उपयोग नहीं किया है ...
andreas-h

1
हाँ, आपके ज़ोंबी में / dev / nst0 खुला है। एक सिस्टम रिबूट शायद इस बिंदु पर सबसे अच्छा शर्त है।
काइल स्मिथ

5
हां, रिबूट प्रचलित उत्तर लगता है। मुझे हमेशा लगता है कि जब मैं एक सर्वर को रिबूट करना है तो मैं असफल रहा हूं। :(
डेविड पास्ले

3

जाँच करें कि क्या कोई कर्नेल आतंक था,

# dmesg |tail

जाँच करें कि क्या प्रक्रिया "D" में अनजानी नींद है, जहाँ यह कुछ syscall के लिए कर्नेल मोड में है जो अभी तक वापस नहीं आया है (या तो कर्नेल ऊप्स, या कुछ अन्य कारण) http://www.nabble.com/What-causes-an -unkillable-प्रक्रिया - td20645581.html


कष्टप्रद स्वरूपण
asdmin

वास्तव में, कोई कर्नेल आतंक नहीं है। प्रक्रिया 'Z' स्थिति में है - एक ज़ोंबी ...
andreas-h

3

यदि एक ज़ोंबी को अपने माता-पिता के रूप में इनिट है, तो इनिट ने ठीक से काम करना बंद कर दिया है। इनिट की भूमिकाओं में से एक लाश को साफ करना है। यदि यह नहीं करता है, तो कोई और करेगा। तो एकमात्र उपाय रीबूट करना है। यदि init टूट गया है, तो एक रिबूट विफल हो सकता है, इसलिए मैं महत्वपूर्ण सेवाओं को बंद कर दूंगा, फिर फाइल सिस्टम को सिंक करें इसके बजाय पावर बटन दबाएं।


मैं ठीक से काम नहीं कर रहा init के बारे में सहमत हूँ। यह भी देखें: upstartऔर systemd
मिकको रेंटालीनन

2

घबराहट को कम करते हैं, हम करेंगे? एक "डिफेक्ट" या "ज़ोंबी" प्रक्रिया एक प्रक्रिया नहीं है । यह सहेजे गए निकास कोड के साथ प्रक्रिया तालिका में एक प्रविष्टि है। इस प्रकार, एक ज़ोंबी कोई संसाधन नहीं रखता है, कोई सीपीयू चक्र नहीं लेता है, और कोई मेमोरी का उपयोग नहीं करता है, क्योंकि यह एक प्रक्रिया नहीं है । सभी अजीब और खुजली मत करो ज़ोंबी प्रक्रियाओं को "मारने" की कोशिश कर रहा है। उनके नाम की तरह, वे मारे नहीं जा सकते, क्योंकि वे पहले से ही मर चुके हैं। लेकिन मस्तिष्क खाने के विपरीत, वे पूरी तरह से बिना किसी को नुकसान पहुंचाते हैं, और अन्य प्रक्रियाओं को नहीं काटेंगे।

ज़ोंबी प्रक्रियाओं को अपने मस्तिष्क को खाने न दें। उन्हें अनदेखा कर दो।


11
हाँ, यह सिद्धांत है। दुर्भाग्य से यह हमेशा सच नहीं है। एक अक्रियाशील प्रक्रिया कभी-कभी सिस्टम संसाधनों पर लटक जाएगी, जैसे andreash ने स्पष्ट रूप से प्रलेखित किया है।
रॉय

5
उनके मामले में, lsof आउटपुट के अनुसार, ज़ोंबी प्रक्रिया / dev / nst0 के दिमाग को खा रही है। उसे बैकअप ऑपरेशन जारी रखने के लिए उन दिमागों की जरूरत है।
काइल स्मिथ

2
एक सिस्टम प्रशासक जो अपने कैरियर को ज़ोंबी प्रक्रियाओं की अनदेखी करते हुए बिताता है, आखिरकार रात के मध्य में उनके जीवन को उनमें से चूसा जा रहा है। एक ज़ोंबी, मेरे अनुभव में, कुछ गलत होने का संकेत है। मैं इन्हें लिखता हूं यहां तक ​​कि एक ज़ोंबी बच्चे की अपने माता-पिता के साथ कुछ अजीब बातचीत होती है, और माता-पिता मेरे सीपीयू को स्पिन कर रहे हैं। मैं नहीं जानता कि यह किसकी गलती है, लेकिन मुद्दा यह है कि लाश बदसूरत हैं और उन्हें अनदेखा करना एक दिन आपको परेशान करने के लिए आएगा। ... एक दिन ... जब आप शांति से सो रहे हों ... आधी रात में ... ठंडी शरद ऋतु के दिन के बाद ...
माइक एस

@ माइक मुझे आपकी टिप्पणी से अच्छी हंसी आई!
पॉल कैलाब्रो

@ मायके का अधिकार है। मेरे पास ssh-Agent defunct है और ssh है और न ही git ठीक से नहीं चल सकता है। केवल पुनरारंभ मदद कर सकता है। (विंडोज के रूप में एक ही तय ... हाहा)
जॉन ट्राइब

0

लगता है जैसे आपको एक अनाथ प्रक्रिया मिली है। जहां तक ​​मुझे पता है कि इनको मारने का एकमात्र तरीका बॉक्स को रिबूट करना होगा। मैंने अपने ईएसएक्स सर्वरों पर (जो हुड के नीचे लाइनक्स हैं) समय-समय पर ऐसा किया है और एक मेजबान रिबूट फिक्स (वीएमवेयर समर्थन से) है।

मैं एक विंडोज लड़का हूं इसलिए इसके लायक हूं।


दुर्भाग्य से, रिबूटिंग एक वास्तविक विकल्प नहीं है। यह एक उत्पादन मशीन भी है जो वॉयस सेवाएं चला रही है, इसलिए मैं इसे कार्यालय के समय के दौरान रिबूट नहीं कर सकता ...
-एच-एच

1
इसलिए, आप इसे कार्यालय समय के बाद रिबूट कर सकते हैं, है ना?
वॉरेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.