Pourquoi la commande ": () {: |: &};:" retarde tellement mon système que j'ai dû redémarrer? "

269
  

DANGER !

     

N'exécutez pas cette commande pour la "tester" à moins que vous ne soyez préparé à un crash et / ou à un redémarrage forcé de votre système.

J'étais dans ma Virtualbox exécutant 12.04 en essayant de compiler une application, et en attendant, je suis tombé par hasard sur un forum où un commentaire disait:

  

Essayez :(){ :|: & };:
  Fun aussi, et n'a pas besoin de root.

Sans réfléchir, je l'ai lancé dans mon gnome-terminal. Cela a rendu mon décalage de 12.04 (dans Virtualbox) tellement mauvais que j'ai dû le fermer.

Ma question est la suivante:

:(){ :|: & };:
    
posée blade19899 04.07.2012 - 13:29
la source

4 réponses

341

Ceci s'appelle une bombe à fourche .

:() signifie que vous définissez une fonction appelée :

{:|: &} signifie que vous devez exécuter la fonction : et renvoyer sa sortie à la fonction : et l'exécuter en arrière-plan.

Le ; est un séparateur de commandes, comme && .

: exécute la fonction la première fois.

Vous créez essentiellement une fonction qui s'appelle elle-même deux fois chaque appel et n’a aucun moyen de se terminer. Il continuera à doubler jusqu'à épuisement des ressources système.

Courir dans Virtualbox était vraiment raisonnable, sinon vous auriez dû redémarrer votre ordinateur.

    
réponse donnée SuperMatt 04.07.2012 - 13:34
la source
158

Il s’agit d’une bombe bombe implémentée en shell.

de wikipedia:

:(){ :|:& };:
\_/| |||| ||\- ... the function ':', initiating a chain-reaction: each ':' will start    two more.
 | | |||| |\- Definition ends now, to be able to run ...
 | | |||| \- End of function-block
 | | |||\- disown the functions (make them a background process), so that the children    of a parent
 | | |||   will not be killed when the parent gets auto-killed
 | | ||\- ... another copy of the ':'-function, which has to be loaded into memory.
 | | ||   So, ':|:' simply loads two copies of the function, whenever ':' is called
 | | |\- ... and pipe its output to ...
 | | \- Load a copy of the function ':' into memory ...
 | \- Begin of function-definition
 \- Define the function ':' without any parameters '()' as follows:
    
réponse donnée Michał Šrajer 04.07.2012 - 13:35
la source
70

Cette commande est une version bien connue de la bombe à fourche

Votre ordinateur est à court de mémoire en forçant un processus à l'infini. Il existe également des mesures de protection que vous pouvez utiliser:

  

Les systèmes de type Unix ont généralement une limite de processus, contrôlée par une commande shell ulimit ou son successeur, setrlimit. Les noyaux Linux définissent et appliquent RLIMIT_NPROC rlimit ("limite de ressources") d'un processus. Si un processus tente d'effectuer un fork et que l'utilisateur qui possède ce processus possède déjà les processus RLIMIT_NPROC , alors le fork échoue. De plus, sous Linux ou * BSD, on peut éditer le même fichier pam_limits config /etc/security/limits.conf . Cependant, toutes les distributions de Linux n'ont pas le module pam_limits installé par défaut.

    
réponse donnée Nemo 04.07.2012 - 13:37
la source
18

Selon ce :(){ :|: & };: s'appelle

  

Forkbomb est une sorte de créateur de virus poétique

     

... Le petit programme sournois lui commande de faire plusieurs copies de   elle-même, déclenchant une réaction en chaîne et épuisant ainsi rapidement   les ressources du système ...

Si vous conseillez de ne pas utiliser cette fonction, vous risquez d’endommager le matériel, car cela entraîne une exécution en boucle et peut facilement provoquer un échauffement dans les ordinateurs portables.

Un autre lien explique les captures d’écran exploser / "> ici .

    
réponse donnée atenz 04.07.2012 - 13:35
la source

Lire d'autres questions sur les étiquettes