Warum dieser Befehl Linux zum Absturz bringt [duplizieren]


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

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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.