2008-12-10 8 views
48

पर एक मृत प्रक्रिया हत्या मैं अपने सिस्टम पर एक मृत प्रक्रिया है:यूनिक्स प्रणाली

abc  22093 19508 0 23:29 pts/4 00:00:00 grep ProcA 
abc  31756  1 0 Dec08 ?  00:00:00 [ProcA_my_collect] <defunct> 

मैं उपरोक्त प्रक्रिया कैसे मार सकते हैं, मशीन के एक रिबूट के बिना? मैंने

kill -9 31756 
sudo kill -9 31756 
+0

तथ्य यह है कि मूल प्रक्रिया आईडी 1 है इसका मतलब है कि जो कुछ भी शुरू हुआ वह मर चुका है। मुझे यकीन नहीं है कि क्यों "init" ने इसे अभी तक नहीं लिया है। –

+0

यह एक ज़ोंबी है! चिंता न करें, वह हानिकारक नहीं है और कुछ भी उपभोग नहीं करता है। – Loki

+3

बस देखा कि reddit पर: http://www.cs.cornell.edu/Courses/cs414/2007sp/tanenbaum.jpg – Loki

उत्तर

39

आप प्रक्रिया मारे गए हैं को देखने के लिए , लेकिन एक मृत प्रक्रिया प्रक्रिया तालिका से गायब नहीं होती है जब तक कि इसकी मूल प्रक्रिया "रीपिंग" नामक एक कार्य नहीं करती है (अनिवार्य रूप से wait(3) को उस प्रक्रिया के लिए बाहर निकलने की स्थिति पढ़ने के लिए बुलाती है)। मृत प्रक्रियाओं का उपयोग नहीं किया गया है जिन्हें "zombie processes" कहा जाता है।

31756 के लिए आप देखे गए मूल प्रक्रिया आईडी प्रक्रिया आईडी 1 है, जो हमेशा init से संबंधित है। उस प्रक्रिया को समय-समय पर अपनी ज़ोंबी प्रक्रियाओं काटना चाहिए, लेकिन यदि यह नहीं हो सकता है, तो वे रीबूट होने तक प्रक्रिया तालिका में लाश बने रहेंगे।

+3

इनिट निश्चित रूप से मृत बच्चों को वापस लाता है। इसके असर के बारे में सोचें कि यह सत्य नहीं है: प्रत्येक बच्चे की प्रक्रिया को अपने माता-पिता के सामने समाप्त करना होगा। – janm

+1

इनट को पुनरारंभ करने से मदद मिल सकती है - लिनक्स पर, टेलिनेट आपको ऐसा करने में सक्षम होना चाहिए। – bdonlan

+7

वह अंतिम वाक्य पूरी तरह से गलत है। बच्चों काटना बहुत ही * केवल * चीज है जो init करता है! –

0

के साथ प्रयास किया है, तो शायद आप माता-पिता को मारने में सक्षम नहीं होंगे, इसका समाधान नहीं होता है। किसी भी कारण से सिस्टम उस ज़ोंबी प्रक्रिया को एकत्र नहीं कर रहा है।

एफडब्ल्यूआईडब्ल्यू, मैंने एससीओ ओपनसेवर बॉक्सन पर इसे थोड़ा सा देखा है जिसे मैं प्रशासित करता था। भारी बहु उपयोगकर्ता उपयोग और कम सिस्टम संसाधन, लेकिन ऐसा कुछ भी चोट नहीं लग रहा था। बस मुझे परेशान किया। :)

22

क्या आपने किसी बच्चे की प्रक्रिया की जांच की है जिसे पहले मारने की आवश्यकता हो सकती है? कभी कभी जाम निर्भर है लाइन नीचे ... प्रयास करें ps -ef --forest

क्या यह कम हो सकती है (यदि कुछ भी) तो उस को मारने के पहले, फिर एक आप पहले से ही पता के बारे में

6

यदि हत्या -9 किसी प्रक्रिया को मारने में विफल रहता है तो कारण लगभग हमेशा ड्राइवर या ऑपरेटिंग सिस्टम बग होता है।

इनिट प्रक्रिया ने प्रक्रिया को अपनाया है, लेकिन यह इसे काट नहीं सकता है। यही कहना है: जब init कॉल प्रतीक्षा करें (2) कि प्रक्रिया वापस नहीं आती है। इनिट के प्राथमिक उद्देश्यों में से एक मृत अनाथाश्रम बच्चों को काटना है, इसलिए समस्या यह नहीं है कि इसका माता-पिता काटने से पहले उसकी मृत्यु हो गई। सोचें: अन्यथा, लॉगआउट के बाद नोहुप्ड प्रक्रिया के परिणाम कैसे प्राप्त करते हैं?

निष्क्रिय प्रक्रिया के बच्चों को मारने में मदद करने की संभावना नहीं है जब तक कि वे किसी विशेष प्रकार से संबंधित बग से संबंधित न हों।

+1

"अगर हत्या -9 किसी प्रक्रिया को मारने में विफल रहता है तो कारण लगभग हमेशा ड्राइवर या ऑपरेटिंग सिस्टम बग होता है।" यह एक निष्क्रिय प्रक्रिया को छोड़कर सच है। kill -9 एक निष्क्रिय प्रक्रिया में कुछ भी करने वाला नहीं है, केवल सिग्किल को प्रक्रिया के बारे में कर्नेल को भेजता है, लेकिन कर्नेल इस सिग्नल के आधार पर प्रक्रिया तालिका का प्रबंधन नहीं करता है। – benc

+0

@benc: मैं मानता हूं, एक ज़ोंबी प्रक्रिया पहले ही मर चुकी है और सिगकिल के जवाब में और नहीं मर जाएगी। हालांकि, मेरा बाकी का जवाब खड़ा है: ऐसा लगता है कि इस प्रक्रिया को प्रतीक्षा में आने पर इन प्रक्रियाओं को रीट नहीं किया जा सकता है()। – janm

0

प्रक्रिया शायद उदाहरण में लटका है SIGPIPE जैसे संकेतों को अनदेखा करते हुए, strace -p <pid> के साथ जांचें कि यहां क्या हो रहा है।