2012-11-18 16 views
61

Se si esegue un file .bat o .cmd con %0|%0 interno, il computer inizia a utilizzare molta memoria e, dopo alcuni minuti, viene riavviato. Perché questo codice blocca Windows? E cosa fa questo codice a livello di programmazione? Potrebbe essere considerato un "bug"?Che cos'è% 0 |% 0 e come funziona?

+1

Possibile duplicato di [bomba a forcella di lotti?] (Http://stackoverflow.com/questions/8949103/batch-fork-bomb) – Cerbrus

risposta

114

Questa è la versione Windows di fork bomb.

%0 è il nome del file batch attualmente in esecuzione. Un file batch che contiene solo questa linea:

%0|%0 

sta andando ad eseguire in modo ricorsivo sé per sempre, la realizzazione rapida di molti processi e rallentando il sistema.

Questo non è un bug in Windows, è solo una cosa molto stupida da fare in un file batch.

+3

Perché% 0 |% 0 interrompe le finestre, ma% 0 no? – Pavel

+8

@Pavel: Ciò che fa un file '.bat' è: leggere le istruzioni, alla fine del file terminate. Se si esegue% 0: Processo 1: avvia, esegue% 0 (quindi crea il processo 2); quindi die Processo 2: avvia, esegue% 0 (quindi crea il processo 3); poi muori [...] al massimo hai 2 processi in esecuzione perché il creatore morirà. Il punto di biforcazione è quello di creare 2 versione. Quindi P1 crea 2 processi (1 'e 1 "), questi due processi creeranno, ciascuno, 2 (quindi 4), andando esponenziale – pltrdy

36

Questo è noto come bomba a forcella. Continua a suddividere se stesso fino a quando non vi è altra possibilità che riavviare il sistema. http://en.wikipedia.org/wiki/Fork_bomb

+0

Posso ottenere il comando per linux? –

+1

@RohanGala:' $ 0; $ 0' (funziona in bash e zsh, testati su Ubuntu 14.04) – seaturtle

+0

Nota che puoi interromperlo con ^C, dovrai ignorare SIGINT o staccarlo per impedirlo. (: – seaturtle

6

È una bomba logica, continua a ricreare se stessa e occupa tutte le risorse della CPU. Sovraccarica il tuo computer con troppi processi e lo costringe a spegnersi. Se fai un file batch con questo in esso e avvialo, puoi terminarlo usando taskmgr. Devi farlo abbastanza rapidamente o il tuo computer sarà troppo lento per fare qualsiasi cosa.

16

Che cosa è:

%0|%0 è un fork bomb. Genererà un altro processo utilizzando una pipe | che esegue una copia dello stesso programma in modo asincrono. In questo modo, la CPU e la memoria sono in avaria, rallentando il sistema fino a fermarsi quasi del tutto (o addirittura mandare in crash il sistema).

Come funziona:

%0 si riferisce al comando utilizzato per eseguire il programma in corso. Ad esempio, script.bat

Un simbolo di tubo | renderà l'output o il risultato della prima sequenza di comandi come input per la seconda sequenza di comandi. Nel caso di una bomba a forcella, non c'è uscita, quindi eseguirà semplicemente la seconda sequenza di comandi senza alcun input.

Espandere l'esempio, %0|%0 potrebbe significare script.bat|script.bat. Questo esegue di nuovo se stesso, ma crea anche un altro processo per eseguire di nuovo lo stesso programma (senza input).

Problemi correlati