कांटा बम के बाद साफ करने का सबसे अच्छा तरीका क्या है?


21
$ ls
bash: no more processes

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

मैंने कुछ तरकीबें सुनी हैं (विशेष रूप से, KILL संकेतों के बजाय STOP सिग्नल भेजने के लिए, क्योंकि बाद वाले शेष धागे को तुरंत मारे गए लोगों को बदलने की अनुमति देंगे), लेकिन मैंने कभी भी एक व्यापक गाइड को हकदार नहीं देखा है , तो आप अपने आप को एक कांटा बम?

चलो एक बनाते हैं।

जवाबों:


10

उल्टी का उपयोग करके प्रति उपयोगकर्ता प्रक्रिया सीमा के साथ प्रक्रिया सीमा को समाप्त करने से कांटा बम को रोकें ।

इस प्रकार, सिस्टम सीमा पूरी होने से बहुत पहले एक एकल उपयोगकर्ता अपनी प्रक्रिया कोटा समाप्त कर देगा।


6

कोशिश करने वाली पहली बात यह होगी कि लोग लॉगआउट करने के लिए लॉग इन करें। यह संभव है कि उनका खोल प्रक्रिया की मूल प्रक्रिया हो सकती है, जो सभी कर रही है और जिससे समस्या समाप्त हो सकती है।

यदि वह काम नहीं करता है, तो आप kill -STOP -2रूट को छोड़कर किसी भी उपयोगकर्ता के रूप में चल रही सभी प्रक्रियाओं को फ्रीज करने के लिए रूट के रूप में चलाने का प्रयास कर सकते हैं । यदि वह काम करता है, तो आप kill -CONT <pid>कांटा बम से संबंधित कुछ ज्ञात प्रक्रियाओं को अनफेयर करने के लिए उपयोग कर सकते हैं और पूर्ण प्रक्रिया तालिका समस्या को खत्म करने के लिए उन्हें मार सकते हैं और आपको समस्या के मूल स्रोत को मारने और ट्रैक करने के लिए कुछ श्वास कक्ष दे सकते हैं। Sendmail को मारने के लिए सिस्टम प्रक्रिया का एक अच्छा उदाहरण होगा क्योंकि pid की पहचान करने के लिए .pid फ़ाइल का उपयोग करके इसे पहचानना आसान होगा। उदाहरण के लिए, kill -CONT $(< /var/run/sendmail.pid); kill $(< /var/run/sendmail.pid)


मारने के लिए आपको "-2" विकल्प क्या दिखाई देता है? मैं इसे लिनक्स पर मैन पेज में नहीं देखता।
राल्दि

1
यह अधिकांश OS में काम करना चाहिए क्योंकि आप पीआईडी ​​के लिए एक नकारात्मक मान निर्दिष्ट कर रहे हैं। यदि <pid> -1 से कम है, तो प्रक्रिया समूह में हर प्रक्रिया के लिए किल भेजा जाता है - <pid>। पीड -2 को STOP का एक सिगिंग भेजना यह सभी प्रक्रियाओं को रोकना चाहिए जो विशेष सिस्टम प्रक्रिया या रूट स्वामित्व वाली प्रक्रिया नहीं हैं।

"नकारात्मक पीआईडी" को मारने के लिए मार (2) मैनपेज देखें, लेकिन मुझे अभी भी इस काम पर विश्वास नहीं है। सभी गैर-इनिट प्रक्रियाएं समूह 2 में क्यों होंगी? मैं समझता हूं कि आप init से बचना चाहते हैं, क्योंकि इसे रोकने के परिणाम अक्सर बहुत घातक होते हैं, लेकिन ...
ephemient

@ephemient, 2 एक प्रक्रिया समूह आईडी होने के लिए बहुत कम है इसलिए शायद यह एक और विशेष मूल्य है।
२०:०२ पर joshudson

@ जोशुआ के पास 0और कोई विशेष मूल्य नहीं हैं -1, opengroup.org/onlinepubs/009695399/functions/kill.html opengroup.org/onlinepubs/000095399/utilities/ill.html/ के
21

3

सुनिश्चित नहीं है कि आप कैसे भी एक STOP सिग्नल भेज सकते हैं, क्योंकि spawning killको उपलब्ध प्रक्रिया संभाल की आवश्यकता होगी। इसके अलावा, मेरे अनुभव में सिस्टम प्रक्रियाओं से बाहर चलने से बहुत पहले ही अतिभारित और अनुपयोगी हो जाते हैं।

क्या आपने केवल प्रति-उपयोगकर्ता प्रक्रिया सीमा लागू करने पर विचार किया है ulimit? जो आपके उपयोगकर्ताओं को कांटा बम (गलती से या नहीं) लॉन्च करने से रोकेगा।


3
मार कम से कम बाश में निर्मित एक खोल है।
राल्दि

1
मुझे लगता है कि यह एक महत्वपूर्ण घटक है - अपनी पसंद के शेल के लिए बिलिंस की पहचान करें।

2
यदि यह बिल्ट-इन नहीं है, तो आप "पीआईडी ​​को मार सकते हैं" चला सकते हैं, जो कांटा नहीं करता है। लेकिन यह जोखिम भरा है, अगर यह काम नहीं करता है, तो आप एक और शेल प्राप्त करने में सक्षम नहीं हो सकते हैं। इसे मधुमक्खी के डंक प्रणाली प्रशासन के दृष्टिकोण के रूप में सोचो!
स्टीफन डार्लिंगटन

2

कुछ बीएसडी प्रणालियों में अंतिम 5 या तो प्रक्रियाओं को रूट करने की क्षमता है। हो सकता है कि आपके सिस्टम में वह क्षमता हो।


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