118 votes

Comment fonctionne cette bombe de fourche bash ?

Selon Wikipedia, voici une bombe de fourche très élégant bash :

Comment ça marche ?

160voto

John Feminella Points 116878

En le décomposant, il y a trois gros morceaux:

:()      # Defines a function, ":". It takes no arguments.
{ ... }; # The body of the function.
:        # Invoke the function ":" that was just defined.

À l'intérieur du corps, la fonction est appelée deux fois et le pipeline est backgrounded; chaque invocation sur le processus engendre encore plus d'appels à des ":". Cela conduit rapidement à une explosion de la consommation des ressources système, le broyage des choses à l'arrêt.

Notez qu'en l'invoquant à la fois, infiniment recursing, ne serait pas assez bon, cela ne ferait que conduire à un débordement de la pile sur le processus d'origine, ce qui est pénible, mais peut être traitée.

Un plus conviviale version ressemble à ceci:

kablammo() {             # Declaration
  kablammo | kablammo&   # The problematic body.
}; kablammo              # End function definition; invoke function.

Edit: William commentaire ci-dessous a été une meilleure formulation de ce que j'ai dit ci-dessus, donc je l'ai modifié pour intégrer cette suggestion.

9voto

Talljoe Points 8423

Réponse courte :

Le signe deux-points (« : ») devient une fonction, si vous exécutez la fonction transmise à la fonction et le mettre dans le backgroun qui signifie pour chaque appel de la fonction 2 exemplaires de la fonction sont appelés. Récursivité s’empare.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X