2012-11-18 106 views
61

如果您在內部運行.bat或.cmd文件,內存爲%0|%0,則您的計算機開始使用大量內存,幾分鐘後重新啓動。爲什麼此代碼會阻止您的Windows?這段代碼在編程上做了什麼?它可以被認爲是一個「bug」?什麼是%0 |%0,它是如何工作的?

+1

可能重複的[批量炸彈?](http://stackoverflow.com/questions/8949103/batch-fork-bomb) – Cerbrus

回答

114

這是一個fork bomb的Windows版本。

%0是當前正在執行的批處理文件的名稱。包含此行的批處理文件:

%0|%0 

要遞歸地自行執行,快速創建許多進程並減慢系統速度。

這不是Windows中的錯誤,在批處理文件中這只是一個非常愚蠢的事情。

+3

爲什麼%0 |%0打破窗口,但%0不是? – Pavel

+8

@Pavel:'.bat'文件的作用是:讀取指令,在文件終止時結束。進程1:啓動,運行%0(從而創建進程2);如果運行%0: 過程2:啓動,運行%0(因此創建過程3);然後死亡 過程2:啓動,運行%0(因此創建過程3);然後死亡 您總是最多有2個進程運行,因爲創建者將死亡。 叉式炸彈的要點是創造2個版本。因此,P1創建2個進程(1'和1「),這兩個進程將創建,每個2(從而4),呈指數式增長。 – pltrdy

36

這被稱爲叉式炸彈。 它一直在自我分裂,直到沒有選擇,只能重新啓動系統。 http://en.wikipedia.org/wiki/Fork_bomb

+0

我可以得到Linux命令嗎? –

+1

@RohanGala:'$ 0; $ 0' bash和zsh,在Ubuntu 14上測試過。04) – seaturtle

+0

請注意,您可以使用^C來停止它,您需要忽略SIGINT或分離以防止出現這種情況。 (: – seaturtle

6

這是一個邏輯炸彈,它不斷重新創建並佔用你所有的CPU資源。它會讓您的計算機因過多進程而超載,並迫使其關閉。如果你用它創建一個批處理文件並啓動它,你可以使用taskmgr來結束它。你必須很快做到這一點,否則你的電腦將無法做任何事情。

16

它是什麼:

%0|%0fork bomb。它將使用管道|產生另一個進程,該進程異步運行同一程序的副本。這會佔用CPU和內存,使系統減速至接近停頓(甚至導致系統崩潰)。

這是如何工作的:

%0是指用於運行當前程序的命令。例如,script.bat

管道|符號將使第一個命令序列的輸出或結果成爲第二個命令序列的輸入。在叉式炸彈的情況下,沒有輸出,所以它將簡單地運行第二個命令序列而沒有任何輸入。

展開示例,%0|%0可能表示script.bat|script.bat。這再次運行,但也創建另一個進程再次運行相同的程序(沒有輸入)。

相關問題