क्रोम ब्राउज़र उत्तरदायी नहीं था और मैंने इसे मारने की कोशिश की थी, लेकिन गायब होने के बजाय प्रक्रिया <defunct>
अपने अधिकार में थी, और इसे नहीं मारा:
<defunct>
एक प्रक्रिया के लिए क्या है और यह क्यों नहीं मारा जाता है?
क्रोम ब्राउज़र उत्तरदायी नहीं था और मैंने इसे मारने की कोशिश की थी, लेकिन गायब होने के बजाय प्रक्रिया <defunct>
अपने अधिकार में थी, और इसे नहीं मारा:
<defunct>
एक प्रक्रिया के लिए क्या है और यह क्यों नहीं मारा जाता है?
जवाबों:
आपके आउटपुट से हमें एक "डिफेक्ट" दिखाई देता है, जिसका अर्थ है कि यह प्रक्रिया या तो अपना कार्य पूरा कर चुकी है या दूषित हो गई है या मार दी गई है, लेकिन इसकी बाल प्रक्रियाएँ अभी भी चल रही हैं या ये मूल प्रक्रिया इसकी बाल प्रक्रिया की निगरानी कर रही है। इस तरह की प्रक्रिया को मारने के लिए, -9 PID काम नहीं करता है। आप उन्हें इस आदेश के साथ मारने की कोशिश कर सकते हैं लेकिन यह बार-बार यह दिखाएगा।
निर्धारित करें कि इस विवादास्पद प्रक्रिया की मूल प्रक्रिया क्या है और इसे मार दें। यह जानने के लिए कमांड चलाएँ:
ps -ef | grep defunct
UID PID PPID C STIME TTY TIME CMD
1000 637 27872 0 Oct12 ? 00:00:04 [chrome] <defunct>
1000 1808 1777 0 Oct04 ? 00:00:00 [zeitgeist-datah] <defunct>
फिर kill -9 637 27872
, तब सत्यापित करें कि डिफंक्शन प्रक्रिया समाप्त हो गई है ps -ef | grep defunct
।
1
( init
)? मान लीजिए, मुझे बस इंतजार करना होगा?
ps -ef | grep defunct | grep -v grep | cut -b8-20 | xargs kill -9
grep [d]efunct
या समान में बदलें और यह स्वयं से मेल नहीं खाएगा।
parents_of_dead_kids=$(ps -ef | grep [d]efunct | awk '{print $3}' | sort | uniq | egrep -v '^1$'); echo "$parents_of_dead_kids" | xargs kill
:। kill -9
यदि आप चाहें तो 30 सेकंड के बाद स्क्रिप्ट को फिर से चलाएँ । (ध्यान दें कि मैं विशेष रूप से हत्या को खारिज करता हूं Init
)
चिह्नित
<defunct>
प्रक्रियाएं मृत प्रक्रियाएं हैं (तथाकथित "लाश" ) जो बनी हुई हैं क्योंकि उनके माता-पिता ने उन्हें ठीक से नष्ट नहीं किया है।init(8)
यदि मूल प्रक्रिया से बाहर निकल जाता है तो ये प्रक्रियाएँ नष्ट हो जाएँगी ।
आप इसे नहीं मार सकते क्योंकि यह पहले से ही मर चुका है। केवल एक ही चीज़ प्रक्रिया तालिका में एक प्रविष्टि है :
यूनिक्स और यूनिक्स जैसे कंप्यूटर ऑपरेटिंग सिस्टम पर, एक ज़ोंबी प्रक्रिया या डिफंक्ट प्रक्रिया एक ऐसी प्रक्रिया है जिसने निष्पादन को पूरा कर लिया है लेकिन अभी भी प्रक्रिया तालिका में एक प्रविष्टि है। यह प्रविष्टि अभी भी आवश्यक है कि माता-पिता प्रक्रिया को अपने बच्चे की निकास स्थिति को पढ़ने की अनुमति दें।
ऐसी प्रक्रियाओं को होने देने में कोई बुराई नहीं है जब तक कि उनमें से कई नहीं हैं। ज़ोंबी अंततः अपने माता-पिता द्वारा पुकारा जाता है (कॉल करके wait(2)
)। यदि मूल माता-पिता ने इसे अपने निकास से पहले नहीं निकाला है तो init
प्रक्रिया ( pid == 1
) कुछ समय बाद करती है। ज़ोंबी प्रक्रिया सिर्फ है:
एक प्रक्रिया जिसे समाप्त कर दिया गया है और जिसे तब हटा दिया गया है जब इसकी निकास स्थिति किसी अन्य प्रक्रिया को बता दी गई है जो उस प्रक्रिया को समाप्त करने की प्रतीक्षा कर रही है।
धन्यवाद माइक एस। हमने आपकी लाइन ले ली और एक स्क्रिप्ट लिखी जो कि विवादास्पद प्रक्रियाओं को मार देगी, जिनके माता-पिता in.telnetd हैं। हम इसे किसी भी मूल प्रक्रिया को मारने के लिए नहीं चाहते थे, बस हमें पता है कि एक समस्या पैदा हो रही है और हम इसे कई बार चलाएंगे ताकि जरूरत पड़ने पर कई लोगों को मार सकें।
# egrep -v '^1$ = Make sure the process is not the init process.
# awk '{print $3}' = Print the parent process.
first_parent_of_first_dead_kid=$(ps -ef | grep [d]efunct | awk '{print $3}' | head -n1 | egrep -v '^1$')
echo "$first_parent_of_first_dead_kid"
# If the first parent of the first dead kid is in.telnetd, then kill it.
if ps -ef | grep $first_parent_of_first_dead_kid | grep in.telnetd;then
echo "We have a defunct process whose parent process is in.telnetd" | logger -t KILL-DEFUNCT-TELNET
echo "killing $first_parent_of_first_dead_kid" | logger -t KILL-DEFUNCT-TELNET
kill $first_parent_of_first_dead_kid 2>&1 | logger -t KILL-DEFUNCT-TELNET
fi
पैडिंगटन के उत्तर पर विस्तार ।।
आपके आउटपुट से हमें एक दोष दिखाई देता है , जिसका अर्थ है कि इस बच्चे की प्रक्रिया ने या तो अपना कार्य पूरा कर लिया है या दूषित या मार दिया गया है। इसकी मूल प्रक्रिया अभी भी चल रही है और इसने अपने मृत बच्चे पर ध्यान नहीं दिया है।
kill -9 PID
काम नहीं करेगा (पहले से ही मृत)।
इस बच्चे की प्रक्रिया के माता-पिता को निर्धारित करने के लिए, यह आदेश चलाएँ:
ps -ef | grep defunct
UID PID **PPID** C STIME TTY TIME CMD
1000 637 27872 0 Oct12 ? 00:00:04 [chrome] <defunct>
देखें कि जनक कौन है: ps ax | grep 27872
यदि आप चाहते हैं कि आप माता-पिता को मार सकते हैं, और दोष दूर हो जाएगा।
kill -9 27872
अधिक तकनीकी तर्क के लिए जेएफ सेबेस्टियन का जवाब देखें।
@ पैडिंगटन के उत्तर में जोड़ते हुए, मैंने त्वरित जाँच के लिए इस फ़ंक्शन को अपने bashrc में जोड़ा:
defunct(){
echo "Children:"
ps -ef | head -n1
ps -ef | grep defunct
echo "------------------------------"
echo "Parents:"
ppids="$(ps -ef | grep defunct | awk '{ print $3 }')"
echo "$ppids" | while read ppid; do
ps -A | grep "$ppid"
done
}
यह कुछ इस तरह का उत्पादन करता है:
बच्चे: UID PID PPID C STIME TTY समय सीएमडी उपयोगकर्ता 25707 25697 0 फ़रवरी 26 अंक / 0 00:00:00 [sh] उपयोगकर्ता 30381 29915 0 11:46 pts / 7 00:00:00 ग्रीप दोष ------------------------------ माता-पिता: 25697 पीटीएस / 0 00:00:00 एनपीएम
kill -9 PID
काम नहीं करते"। यह आंशिक रूप से सच है: वास्तव में, कोई मार काम नहीं करेगा। इसके अलावा, -9 को अंतिम उपाय के रूप में इस्तेमाल किया जाना चाहिए। समय की 99% मूल प्रक्रिया की एक डिफ़ॉल्ट हत्या इसे मार देगी और सभी बच्चों को काट देगी। एक "डिफ़ॉल्ट मार" एक SIGTERM (-15) है। मैं -9 (SIGKILL) के प्रशंसकों को stackoverflow.com/questions/690415/…