GNU/Linux >> Tutoriels Linux >  >> Linux

La commande Bash :(){ :|:&};:générera des processus jusqu'à la mort du noyau. Pouvez-vous expliquer la syntaxe ?

:(){ :|:& };:

..définit une fonction nommée : , qui se génère (deux fois, l'un dans l'autre) et s'arrière-plan lui-même.

Avec sauts de ligne :

:()
{
    :|:&
};
:

Renommer le : fonction à forkbomb :

forkbomb()
{
    forkbomb | forkbomb &
};
forkbomb

Vous pouvez empêcher de telles attaques en utilisant ulimit pour limiter le nombre de processus par utilisateur :

$ ulimit -u 50
$ :(){ :|:& };:
-bash: fork: Resource temporarily unavailable
$

De manière plus permanente, vous pouvez utiliser /etc/security/limits.conf (sur Debian et autres, au moins), par exemple :

* hard nproc 50

Bien sûr, cela signifie que vous ne pouvez exécuter que 50 processus, vous pouvez augmenter ce nombre en fonction de ce que fait la machine !


Cela définit une fonction appelée : qui s'appelle deux fois (Code :: | : ). Il le fait en arrière-plan (& ). Après le ; la définition de la fonction est faite et la fonction : commence.

Ainsi, chaque instance de :démarre deux nouveaux :et ainsi de suite... Comme un arbre binaire de processus...

Écrit en C clair, c'est-à-dire :

fork();
fork();

Linux
  1. 3 commandes Linux pour arrêter le système et vous pourrez le faire facilement

  2. La différence entre les opérateurs bash [[ Vs [ Vs ( Vs ((?

  3. La commande "eval" dans Bash ?

  4. Expliquer les options de la commande Readlink ?

  5. Pouvez-vous exécuter Xcode sous Linux ?

4 façons de modifier un PDF avec la commande pdftk-java

30 choses que vous ne saviez pas sur le noyau Linux

Comment utiliser la commande de lecture Bash

La liste des raccourcis clavier Bash utiles

Qu'est-ce que la commande d'exportation est censée faire sous Linux ?

Ps peut-il afficher uniquement les processus non-noyau sous Linux ?