GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Der Bash-Befehl :(){ :|:&};:bringt Prozesse zum Kernel-Tod. Können Sie die Syntax erklären?

:(){ :|:& };:

..definiert eine Funktion namens : , das sich selbst spawnt (zweimal, eine Pipe in die andere) und sich selbst in den Hintergrund setzt.

Mit Zeilenumbruch:

:()
{
    :|:&
};
:

Umbenennen der : Funktion zu forkbomb :

forkbomb()
{
    forkbomb | forkbomb &
};
forkbomb

Sie können solche Angriffe verhindern, indem Sie ulimit verwenden um die Anzahl der Prozesse pro Benutzer zu begrenzen:

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

Dauerhafter können Sie /etc/security/limits.conf verwenden (zumindest unter Debian und anderen), zum Beispiel:

* hard nproc 50

Das bedeutet natürlich, dass Sie nur 50 Prozesse ausführen können. Je nachdem, was die Maschine tut, möchten Sie dies möglicherweise erhöhen!


Das definiert eine Funktion namens : die sich zweimal selbst aufruft (Code:: | : ). Dies geschieht im Hintergrund (& ). Nach dem ; die Funktionsdefinition ist fertig und die Funktion : beginnt.

Also beginnt jede Instanz von :zwei neue :und so weiter... Wie ein binärer Baum von Prozessen...

In einfachem C geschrieben ist das:

fork();
fork();

Linux
  1. 3 Linux-Befehle zum Herunterfahren des Systems und Sie können es einfach tun

  2. Der Unterschied zwischen den Bash-Operatoren [[ Vs [ Vs ( Vs ((?

  3. Der „eval“-Befehl in Bash?

  4. Eine Anleitung zum Linux-Befehl „Top“.

  5. Ausführen einer User-Space-Funktion aus dem Kernel-Space

4 Möglichkeiten, wie Sie ein PDF mit dem Befehl pdftk-java bearbeiten können

So verwenden Sie den Bash-Lesebefehl

Die Liste nützlicher Bash-Tastaturkürzel

Wie kann ich das Argument des vorherigen Bash-Befehls abrufen?

'&&' vs. '&' mit dem 'test'-Befehl in Bash

Kann ps unter Linux nur Nicht-Kernel-Prozesse anzeigen?