Warum dieser Befehl Linux zum Absturz bringt [duplizieren]

5

Mögliches Duplikat:
Was bedeutet dieser kryptische Bash-Befehl?

Warum stürzt dieser Befehl Linux ab?

:(){ :|:& };: 
Darth Vader
quelle
2
Ein richtig konfiguriertes Linux stürzt nicht ab - es
verbraucht
4
Für alle, die dies lesen: FÜHREN SIE DIESES BEFEHL NICHT AUS .
Wuffers

Antworten:

20

Der Befehl definiert eine Funktion namens :, die beim Aufruf zwei Kopien von sich selbst im Hintergrund erzeugt und beendet. Diese beiden Kopien machen dasselbe, was in nur einer Sekunde zu einer enormen Anzahl von Prozessen führt, die auf unbestimmte Zeit fortgesetzt werden.

Das Folgende ist genau die gleiche Funktion, jedoch mit einem besser lesbaren Namen:

foo() {
    foo | foo &
}

foo
Grawity
quelle
Kannst
du
3
@ iJeeves: Hab ich. Es ist in der Post.
Grawity
Wo er foo schreibt, ersetzen Sie es durch:
adamo
3

Prozesse werden endlos in den Hintergrund verschoben. Nach einer Weile gibt es zu viele Prozesse, die jeweils eine geringe Menge an Systemressourcen beanspruchen.

Olli
quelle
3

Technisch gesehen ist das System nicht abgestürzt. Ein Systemabsturz führt zu einem Exit mit Fehlern. Es hat auch nicht gehangen. Dies würde bedeuten, dass das System etwas tut und nicht zurückgekehrt ist. Im konkreten Fall funktioniert es einwandfrei. Die Antwort dauert einfach zu lange, da eine Computerrealisierung über endliche Ressourcen verfügt. Unendliche Prozesse und endliche Ressourcen haben daher eine unendliche Reaktionszeit zur Folge.

g24l
quelle
Könnten Sie bitte die Ablehnung erklären? Ich behaupte nur, dass dies in der Tat die falsche Frage ist, da dies, wie oben erwähnt, keine Probleme verursachen würde, wenn die Benutzerressourcen eingeschränkt wären. Daher ist dies nicht das eigentliche Linux / Unix-System, sondern das Ergebnis einer fehlerhaften Administration.
g24l