2009-06-13 16 views
113

विकिपीडिया के अनुसार, निम्नलिखित एक बहुत ही सुरुचिपूर्ण बाश कांटा बम है:यह बाश कांटा बम कैसे काम करता है?

:(){ :|:& };: 

यह कैसे काम करता है?

+50

:() {: |: & };: इसका मतलब यह नहीं है कि यूनिक्स अस्पष्ट है। सिर्फ इसलिए कि यह आपको अस्पष्ट चीजों को लिखने की इजाजत देता है इसका मतलब यह नहीं है कि सही तरीके से उपयोग होने पर यह अस्पष्ट है। मैं अंग्रेजी में कुछ बहुत ही खराब एफ-एड अप वाक्यों को लिख सकता हूं, लेकिन मैं कुछ समझने में कुछ भी लिख सकता हूं। – c4757p

+9

@ c4757p मामले में मामला: "बफेलो भैंस बफेलो भैंस भैंस भैंस बफेलो भैंस" अमेरिकी अंग्रेजी में एक व्याकरणिक रूप से सही वाक्य है (http://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo) – tomfumb

+0

यहां एक अच्छा स्पष्टीकरण है कि कांटा कैसे बम काम करता है: [http://www.cyberciti.biz/faq/understanding-bash-fork-bomb/ ](http://www.cyberciti.biz/faq/understanding-bash-fork-bomb/) दुर्भाग्यवश, यह स्माइलीज़ से भरी हुई है, मैंने इसे यहां सादे पाठ में भी अपलोड किया है: [http://pbin.oogly.co.uk/listings/viewlistingdetail/7e9399079ac13111492326d01ed16d ](http://pbin.oogly.co.uk/listings/ viewlistingdetail/7e9399079ac13111492326d01ed16d) आनंद लें, यह एक अच्छा पढ़ा है। – Jon

उत्तर

157

यह विश्लेषण करना, तीन बड़े टुकड़े कर रहे हैं:

:()  # Defines a function, ":". It takes no arguments. 
{ ... }; # The body of the function. 
:  # Invoke the function ":" that was just defined. 

शरीर के अंदर, समारोह दो बार शुरू हो जाती है और पाइप लाइन backgrounded है; प्रक्रियाओं पर प्रत्येक क्रमिक आमंत्रण ":" को और भी अधिक कॉल करता है। यह सिस्टम संसाधनों में विस्फोटक खपत के लिए तेजी से आगे बढ़ता है, जिससे चीजों को रोक दिया जाता है।

ध्यान दें कि इसे एक बार आविष्कार करना, असीमित रूप से पुनरावर्ती होना पर्याप्त नहीं होगा, क्योंकि इससे मूल प्रक्रिया पर एक स्टैक ओवरफ़्लो हो जाएगा, जो गन्दा है लेकिन इसका सामना किया जा सकता है।

एक और अधिक मानव के अनुकूल संस्करण इस तरह दिखता है:

kablammo() {    # Declaration 
    kablammo | kablammo& # The problematic body. 
}; kablammo    # End function definition; invoke function. 

संपादित करें: नीचे विलियम की टिप्पणी क्या मैं ऊपर कहा की एक बेहतर शब्दों था, इसलिए मुझे लगता है कि प्रतिक्रिया को सम्मिलित करने के लिए संपादित किया है।

+9

... और, kablammo! –

+2

बस यह सुनिश्चित करें कि जब आपका सिस्टम धूम्रपान में जाता है तो आप विस्फोट से स्पष्ट रहें! –

+8

माइनर नाइट: "फ़ंक्शन दो बार बुलाया जाता है और एक उदाहरण पृष्ठभूमि होता है" बिल्कुल सही नहीं है। फ़ंक्शन को पाइपलाइन में दो बार बुलाया जाता है और पाइप पृष्ठभूमि होती है, इसलिए दोनों उदाहरण पृष्ठभूमि में चल रहे हैं। यद्यपि यह एक अर्थपूर्ण विवरण है, वास्तव में यह संभव है कि केवल एक का प्रयास किया जाए, और इसकी पुनरावृत्ति दूसरे शुरू होने से पहले सिस्टम को रोक देती है। –

9

लघु जवाब:

बृहदान्त्र (":"), एक समारोह हो जाता है तो आप चल रहे हैं समारोह समारोह को पहुंचाया और पृष्ठभूमि समारोह के हर मंगलाचरण के लिए इसका मतलब है जिसमें यह डालने की 2 प्रतियां समारोह बुलाया जाता है। रिकर्सन पकड़ लेता है।

संबंधित मुद्दे