Question Pourquoi la commande “: () {: |: &} ;: a-t-elle tellement retardé mon système que j'ai dû redémarrer?


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, j'ai eu la chance de rencontrer un forum où un commentaire disait:

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

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

Ma question est ce que fait cette commande?

:(){ :|: & };:

272
2017-07-04 11:29


origine


en relation Comment protéger Ubuntu de la bombe à fourche - Sathya
Voir aussi un ancien fil: ubuntuforums.org/showthread.php?t=1392511 - Paddy Landau
En relation: Comment fonctionne une bombe à fourche? et Où est le fork () sur la bombe: () {: |: &};:? - terdon♦
duplication possible du site transversal de: stackoverflow.com/questions/515844/… - Ciro Santilli 新疆改造中心 六四事件 法轮功
"si mal" est plutôt optimiste. - pstadler


Réponses:


Ceci s'appelle un bombe à fourche.

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

{:|: &} signifie exécuter la fonction : et envoyer sa sortie à la : fonctionne à nouveau et lancez-le en arrière-plan.

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

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

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

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


345
2017-07-04 11:34



Cette réponse semble suggérer que le redémarrage est le seulement recours. Mais en fait, cette bombe à fourche peut être tuée sans redémarrer, et j'ai en fait constaté que cela ne fonctionnait pas correctement sur certains systèmes (car leur limite de réapparition est raisonnablement définie). - Konrad Rudolph
En fait, pour une explication complète, cela devrait probablement mentionner que ; est un séparateur de commandes. le { ... } partie est simplement le contenu de la fonction. - Michael Kjörling
@ MichaelKjörling +1 Je n'ai même pas compris la syntaxe avant d'avoir pris en compte vos commentaires. - jumpnett
@SuperMatt Je ne sais pas si cette question est toujours active, mais de toute façon je voulais savoir ce que fait | et & faire. Je comprends que vous avez fourni le fonctionnement de la fonction mais je voulais faire savoir ce que font ces deux - Noober
@ Noober si vous vous demandez encore (comme je le suis dans ce trou noir de documentation laconique et cryptique qu'est Linux), je sais! | est un tube placé après une commande pour envoyer cette commande en sortie de la commande suivante. & est un fork il crée un nouveau thread pour la commande précédente en laissant le thread en cours pour continuer à exécuter plus de commandes - flurbius


Ceci est un soi-disant bombe à fourche implémenté 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:

161
2017-07-04 11:35



Bien que ce soit un point tangentiel et que le terme "désavantage" puisse être surchargé, techniquement, un processus mis en arrière-plan n'est pas désavoué et peut toujours être mis au premier plan avec la commande "fg", et le processus se terminera si l'utilisateur se déconnecte (s'il reste des ressources disponibles pour effectuer une déconnexion) .... sauf si et jusqu'à ce que l'on s'exécute sur le processus ou jobid. Après cela, il est en effet désavoué: la déconnexion ne se terminera pas et fg n'aura aucun effet. - Rondo
Bien que ce ne soit qu'un point mineur, les parenthèses ne signifient pas qu'il n'y a pas de paramètres dans les shells de type bash, ils ne sont que des restes de langages de style C. - Charlie Harding


Cette commande est une version bien connue du bombe à fourche

fork bomb pic from wikipedia

Cela fait que votre ordinateur est à court de mémoire en forçant un processus à l'infini. Il existe des garanties que vous pouvez également utiliser contre cela:

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à RLIMIT_NPROC processus, alors le fork échoue. De plus, sous Linux ou * BSD, on peut éditer le pam_limits fichier de configuration /etc/security/limits.conf au même effet. Cependant, toutes les distributions de Linux n'ont pas pam_limits module installé par défaut.


70
2017-07-04 11:37





Selon ce  :(){ :|: & };: est appelé

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

... Le petit programme sournois lui ordonne 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 ...

Il est donc conseillé de ne pas faire fonctionner ce produit, car cela pourrait endommager le matériel, car cela entraînerait une exécution en boucle, ce qui pourrait facilement provoquer un échauffement dans les ordinateurs portables.

Un autre lien explique les captures d'écran ici.


18
2017-07-04 11:35



Si une bombe à fourche provoque dommages matériels, alors vous avez un problème beaucoup plus grand et plus profond. - Michael Kjörling
Peut-être parlait-il d'une bombe en forme de fourche pouvant exploser près de votre PC? - dysoco
Le lien pour la capture d'écran est cassé. - IMustBeSomeone