यह फोर्क बम हमेशा मुझे एक एआई प्रोग्रामिंग शिक्षक द्वारा कहे गए कुछ पाठों की याद दिलाता है, जिसमें मैंने पहले पाठ में कहा था "पुनरावृत्ति को समझने के लिए, पहले आपको पुनरावृत्ति को समझना चाहिए"।
इसके मूल में, यह बम एक पुनरावर्ती कार्य है। संक्षेप में, आप एक फ़ंक्शन बनाते हैं, जो स्वयं कॉल करता है, जो स्वयं कॉल करता है, जो स्वयं कॉल करता है .... जब तक कि सिस्टम संसाधनों का उपभोग नहीं किया जाता है। इस विशिष्ट उदाहरण में, फ़ंक्शन को पाइपिंग के उपयोग और इसे बैकग्राउंड करके पुनरावृत्ति को बढ़ाया जाता है।
मैंने इसे StackOverflow पर उत्तर दिया है , और मुझे लगता है कि वहां दिया गया उदाहरण इसे सबसे अच्छा दिखाता है, सिर्फ इसलिए कि यह देखना आसान है कि यह एक नज़र में क्या करता है (ऊपर दिए गए लिंक से चुराया गया है ...)
☃(){ ☃|☃& };☃
बग फ़ंक्शन को परिभाषित करें ☃() { ... }
, जिसका शरीर खुद को (बग फ़ंक्शन) कहता है, आउटपुट को स्वयं (बग फ़ंक्शन) को पाइप करता है ☃|☃
, और परिणाम को पृष्ठभूमि देता है &
। फिर, फ़ंक्शन परिभाषित होने के बाद, वास्तव में बग फ़ंक्शन को कॉल करें ; ☃
।
मैं ध्यान देता हूं कि कम से कम मेरे आर्क वीएम पर, प्रक्रिया को पृष्ठभूमि देने की आवश्यकता नहीं है, सभी अंतिम प्रक्रिया स्थान का उपभोग करने और मेजबान b0rked को प्रस्तुत करने के लिए एक ही अंतिम परिणाम होने की आवश्यकता नहीं है। दरअसल अब मैंने कहा है कि ऐसा लगता है कि कभी-कभी रन-वे की प्रक्रिया को समाप्त कर दिया जाता है और एक स्क्रीनफुल होने के बाद -bash: fork: Resource temporarily unavailable
यह एक Terminated
(और journalctl
बैश कोर डंपिंग दिखाता है) के साथ बंद हो जाएगा ।
Csh / tsh के बारे में आपके प्रश्न का उत्तर देने के लिए, उनमें से कोई भी शेल फ़ंक्शन का समर्थन नहीं करता है, आप केवल उर्फ कर सकते हैं। तो उन गोले के लिए आपको एक शेल स्क्रिप्ट लिखनी होगी, जो खुद को पुनरावर्ती कहता है।
zsh को समान भाग्य (समान कोड के साथ) का नुकसान लगता है, कोर डंप नहीं करता है और आर्क को देने का कारण बनता है Out of memory: Kill process 216 (zsh) score 0 or sacrifice child.
, लेकिन यह अभी भी कांटा बना हुआ है। थोड़ी देर बाद यह कहा जाता है Killed process 162 (systemd-logind) ...
(और अभी भी एक कांटेदार ज़ीश जारी है)।
आर्क pacman
को ksh का संस्करण नहीं लगता है , इसलिए मुझे इसके बजाय डेबियन पर प्रयास करना पड़ा। ksh ऑब्जेक्ट्स को :
एक फ़ंक्शन नाम के रूप में, लेकिन कुछ का उपयोग करके - b()
इसके बजाय वांछित परिणाम लगता है।