web-dev-qa-db-fra.com

Qu'est-ce que% 0 |% 0 et comment ça marche?

Si vous exécutez un fichier .bat ou .cmd avec %0|%0 à l'intérieur, votre ordinateur commence à utiliser beaucoup de mémoire et est redémarré après quelques minutes. Pourquoi ce code bloque-t-il Windows? Et que fait ce code par programmation? Pourrait-il être considéré comme un "bug"?

68
Doon

Ceci est la version Windows d'une bombe à retardement .

%0 est le nom du fichier batch en cours d’exécution. Un fichier batch contenant uniquement cette ligne:

%0|%0

S'exécutera de manière récursive pour toujours, créant rapidement de nombreux processus et ralentissant le système.

Ce n'est pas un bug dans Windows, c'est juste une chose très stupide à faire dans un fichier batch.

129
Jonathon Reinhart

Ceci est connu comme une fourchette bombe. Il continue à se diviser jusqu'à ce qu'il n'y ait plus d'autre option que de redémarrer le système. http://en.wikipedia.org/wiki/Fork_bomb

38
Harrison Dyer

Ce que c'est:

%0|%0 Est un bombe à retardement. Cela engendrera un autre processus en utilisant un tube | Qui exécute une copie du même programme de manière asynchrone. Cela piège le processeur et la mémoire, ce qui ralentit le système presque (voire le bloque).

Comment ça marche:

%0 Fait référence à la commande utilisée pour exécuter le programme actuel. Par exemple, script.bat

Un symbole pipe | Transformera la sortie ou le résultat de la première séquence de commandes en entrée de la deuxième séquence de commandes. Dans le cas d'une bombe à fourche, il n'y a pas de sortie, donc la seconde séquence de commande sera exécutée sans aucune entrée.

En développant l'exemple, %0|%0 Pourrait signifier script.bat|script.bat. Cela s'exécute à nouveau, mais crée également un autre processus pour exécuter le même programme à nouveau (sans entrée).

20
Samuel Liew

C'est une bombe logique, elle continue de se recréer et utilise toutes vos ressources CPU. Il surcharge votre ordinateur avec trop de processus et le force à s’éteindre. Si vous créez un fichier de commandes contenant ce fichier et que vous le démarrez, vous pouvez le terminer à l'aide de taskmgr. Vous devez le faire assez rapidement ou votre ordinateur sera trop lent pour faire quoi que ce soit.

7
Edward