2012-11-18 36 views
61

यदि आप %0|%0 के साथ .bat या .cmd फ़ाइल चलाते हैं, तो आपका कंप्यूटर बहुत मेमोरी का उपयोग करना शुरू कर देता है और कई मिनट बाद पुनरारंभ होता है। यह कोड आपके विंडोज़ को क्यों अवरुद्ध करता है? और यह कोड प्रोग्रामेटिक रूप से क्या करता है? इसे "बग" माना जा सकता है?% 0 |% 0 क्या है और यह कैसे काम करता है?

+1

[बैच कांटा बम?] (Http://stackoverflow.com/questions/8949103/batch-fork-bomb) का संभावित डुप्लिकेट – Cerbrus

उत्तर

114

यह fork bomb का विंडोज संस्करण है।

%0 वर्तमान में निष्पादित बैच फ़ाइल का नाम है। एक बैच फ़ाइल है कि सिर्फ इस लाइन में शामिल हैं:

%0|%0 

रिकर्सिवली ही हमेशा के लिए निष्पादित करने के लिए जा रहा है, जल्दी से कई प्रक्रियाओं बनाने और सिस्टम धीमा।

यह विंडोज़ में एक बग नहीं है, यह बैच फ़ाइल में बस एक बहुत ही बेवकूफ चीज है।

+3

% 0 |% 0 ब्रेक विंडोज क्यों करता है, लेकिन% 0 नहीं करता है? – Pavel

+8

@ पावेल: क्या '.bat' फ़ाइल है: फ़ाइल समाप्त होने के अंत में निर्देश पढ़ें। यदि आप% 0: चलाते हैं प्रक्रिया 1: प्रारंभ होता है,% 0 चलाएं (इस प्रकार प्रक्रिया 2 बनाएं); फिर मरें प्रक्रिया 2: शुरू होता है,% 0 चलाएं (इस प्रकार प्रक्रिया 3 बनाएं); तो मरें [...] आप हमेशा 2 प्रक्रिया चल रहे हैं क्योंकि निर्माता मर जाएगा। फोर्क बम का बिंदु 2 संस्करण बनाना है। इस प्रकार पी 1 2 प्रक्रिया (1 'और 1 ") बनाते हैं, वे दो प्रक्रियाएं, प्रत्येक, 2 (इस प्रकार 4), घातीय जा रही हैं। – pltrdy

36

इसे एक कांटा बम के रूप में जाना जाता है। यह तब तक विभाजित रहता है जब तक कि सिस्टम को पुनरारंभ करने के अलावा कोई विकल्प न हो। http://en.wikipedia.org/wiki/Fork_bomb

+0

क्या मुझे लिनक्स के लिए कमांड मिल सकता है? –

+1

@ रोहनगाला:' $ 0; $ 0' (काम करता है बैश और जेएसएच, उबंटू 14 पर परीक्षण किया गया।04) – seaturtle

+0

ध्यान दें कि आप इसे^सी के साथ रोक सकते हैं, आपको SIGINT को अनदेखा करना होगा या इसे रोकने के लिए अलग करना होगा। (: – seaturtle

6

यह एक तर्कसंगत बम है, यह खुद को पुनर्निर्माण करता है और आपके सभी CPU संसाधनों को लेता है। यह आपके कंप्यूटर को बहुत अधिक प्रक्रियाओं के साथ अधिभारित करता है और यह इसे बंद करने के लिए मजबूर करता है। यदि आप इसमें बैच फ़ाइल बनाते हैं और इसे शुरू करते हैं तो आप taskmgr का उपयोग करके इसे समाप्त कर सकते हैं। आपको इसे बहुत तेज़ी से करना है या आपका कंप्यूटर कुछ भी करने में बहुत धीमा होगा।

16

यह क्या है:

%0|%0 एक fork bomb है। यह एक पाइप | का उपयोग करके एक और प्रक्रिया उत्पन्न करेगा जो एक ही प्रोग्राम की प्रतिलिपि असीमित रूप से चलाता है। यह सीपीयू और मेमोरी को हॉग करता है, जिससे सिस्टम को निकट-रोक में धीमा कर दिया जाता है (या सिस्टम को भी क्रैश करता है)।

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

%0 वर्तमान कार्यक्रम चलाने के लिए इस्तेमाल किया आदेश को दर्शाता है। उदाहरण के लिए, script.bat

एक पाइप | प्रतीक दूसरे कमांड अनुक्रम के इनपुट के रूप में पहले कमांड अनुक्रम का आउटपुट या परिणाम देगा। एक कांटा बम के मामले में, कोई आउटपुट नहीं है, इसलिए यह बिना किसी इनपुट के दूसरे कमांड अनुक्रम को चलाएगा।

उदाहरण का विस्तार, %0|%0 का मतलब script.bat|script.bat हो सकता है। यह फिर से चलाता है, लेकिन एक ही प्रोग्राम को फिर से चलाने के लिए एक और प्रक्रिया बना रहा है (बिना इनपुट के)।

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