2011-03-22 7 views
10

प्रक्रिया पेड़ की बात करते समय सिगरम और सिगकिल के बीच क्या अंतर है?
जब एक रूट धागा सिगकिल प्राप्त करता है तो यह साफ हो जाता है या क्या यह अपने बच्चों के धागे को लाश के रूप में छोड़ देता है?
क्या कोई सिग्नल है जो रूट थ्रेड पर भेजा जा सकता है ताकि किसी ज़ोंबी धागे को छोड़कर साफ से बाहर निकल सके?प्रक्रिया पेड़ पर विचार करने के लिए सिगकिल सिगरेट के बीच अंतर

धन्यवाद।

+1

पूरी प्रक्रिया समूहों की हत्या के लिए एक अलग सिस्टम कॉल नहीं है। लिनक्स में * धागे * और * प्रक्रियाओं * के बीच के अंतर के बारे में भी स्पष्ट होना महत्वपूर्ण है - वे अलग-अलग चीजें हैं। – Pointy

+2

[! [सिगकिल का उपयोग करने का असली कारण] (https://i.stack.imgur.com/SnEqw.png)] (https://i.stack.imgur.com/SnEqw.png) शायद आप चाहें इस कॉमिक को दिमाग में रखने के लिए। स्रोत: http://turnoff.us/geek/dont-sigkill/ –

उत्तर

13

यदि आप रूट प्रक्रिया (मूल प्रक्रिया) को मार देते हैं, तो यह अनाथ बच्चों को, ज़ोंबी बच्चों को नहीं बनाना चाहिए। अनाथ बच्चे तब होते हैं जब आप किसी प्रक्रिया के माता-पिता को मारते हैं, और कर्नेल अनाथों के माता-पिता को बना देता है। अनाथ को अनाथ मरने तक इंतजार करना चाहिए, फिर इसे साफ करने के लिए प्रतीक्षा करें।

ज़ोंबी बच्चे तब बनाए जाते हैं जब एक प्रक्रिया (इसके माता-पिता नहीं) समाप्त होती है और इसके माता-पिता प्रक्रिया तालिका से बाहर निकलने की स्थिति नहीं लेते हैं।

यह मुझे लगता है जैसे आप अनाथ छोड़ने के बारे में चिंतित हैं क्योंकि परिभाषा के अनुसार, जब आप ज़ोंबी पैरेंट प्रक्रिया को मारते हैं, तो ज़ोंबी बच्चा ही मर जाता है।

अपने अनाथों को मारने के लिए, हत्या -9 का उपयोग करें, जो बराबर सिगकिल है।

यहाँ

लिनक्स पर सामान की हत्या के लिए गहराई ट्यूटोरियल में एक अधिक है: `killpg`: http://riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/

0

आप सिग्नल द्वारा इसे नियंत्रित नहीं कर सकते; केवल waitpid() पर कॉल करके या SIGCHLD के लिए सिग्नल हैंडलर सेट करके, इसकी मूल प्रक्रिया केवल उस पर नियंत्रण कर सकती है। विवरण के लिए sigaction(2) मैनपेज में SIGCHLD और SA_NOCLDWAIT देखें।

इसके अलावा, बाल धागे का क्या होता है लिनक्स कर्नेल संस्करण पर निर्भर करता है। 2.6 के पॉज़िक्स धागे के साथ, मुख्य धागे को मारने से अन्य धागे साफ-सफाई से निकल सकते हैं। 2.4 लिनक्स थ्रेड के साथ, प्रत्येक थ्रेड वास्तव में एक अलग प्रक्रिया है और SIGKILL रूट थ्रेड को दूसरों को बंद करने के बारे में बताने का मौका नहीं देता है, जबकि SIGTERM करता है।