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?
risposta
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.
Perché% 0 |% 0 interrompe le finestre, ma% 0 no? – Pavel
@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
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
È 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.
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).
- 1. Come funziona [0] e [3] in ASN1?
- 2. Se entrambi [0] == 0 e 0 == [[0]] sono veri del perché è [0] == [[0]] falso?
- 3. Utilizzo di request.getRemoteAddr() restituisce 0: 0: 0: 0: 0: 0: 0: 1
- 4. (oggetto) 0 == (oggetto) 0
- 5. Cosa margine: 5px 0; e margine: 5px 0 0; significare?
- 6. Differenza tra array.GetLength (0) e array.GetUpperBound (0)
- 7. Perché 0 == [], ma 0 == false e! [] == false?
- 8. su Android getBounds disegnabili return Rect (0, 0 - 0, 0)
- 9. Haskell: Come ottenere "\\ 0" in "\ 0"?
- 10. //! [0] C++ - che cos'è?
- 11. functor che restituisce 0
- 12. ViewPager.setOffscreenPageLimit (0) non funziona come previsto
- 13. Se $ variabile = 0 non funziona
- 14. Cosa significano "positivo" e "negativo" in ECMAScript? +0 e -0
- 15. È! 0 e! 1 meglio di 1 e 0?
- 16. Che cosa significa "0" nel BinData di MongoDB (0, "e8MEnzZoFyMmD7WSHdNrFJyEk8M =")?
- 17. Perché -0 === 0 è vero?
- 18. Come posso sostituire {0} ma non {{0}}?
- 19. distinguere tra 0 e ""
- 20. Indicizzazione stringa - Perché S [0] [0] funziona e S [1] [1] fallisce?
- 21. SVG larghezza elemento e impostare in html, ma che appare come 0 0 ispettore
- 22. ScheduledThreadPoolExecutor e corePoolSize 0?
- 23. exit (0) vs return 0
- 24. Cosa significa ?: * (int32 *) 0 = 0;
- 25. switch (! 0) Che cosa significa
- 26. Compilando automaticamente 0 e 0% in celle vuote di Excel
- 27. Cosa perl variabile speciale $ - [0] e $ + [0] significa
- 28. se @@ Trancount> 0 non funziona
- 29. Numpy: arr [..., 0 ,:] funziona. Ma come posso archiviare i dati contenuti nel comando slice (..., 0, :)?
- 30. In C#, perché il dizionario [0] ++ funziona?
Possibile duplicato di [bomba a forcella di lotti?] (Http://stackoverflow.com/questions/8949103/batch-fork-bomb) – Cerbrus