Gibt es überhaupt eine Möglichkeit, dies zu stoppen, ohne den Computer neu zu starten?
Es ist nicht ganz unmöglich, und Sie können es durch Glück tun - dh Sie schaffen es, alle Prozesse zu beenden, bevor ein anderer erzeugt wird. 1 Aber du musst sehr, sehr viel Glück haben, also ist es keine verlässliche oder lohnende Anstrengung [vielleicht hat slm hier mehr Glück als ich, lol - TBH, ich habe mich nicht so sehr bemüht] . Wenn Sie mit Prioritäten herumspielen, könnten sich Ihre Chancen verbessern (siehe man nice
), obwohl ich vermute, dass dies auch die Wirksamkeit der Gabelbombe beeinträchtigt.
Eine bessere Idee könnte sein, eine zu verwenden, die eine Zeitüberschreitung aufweist. Ein Beispiel in C finden Sie in Fußnote 5 zu meiner Antwort hier . 2 Sie können dasselbe mit einem Shell-Skript tun, wenn auch nicht so kurz wie :(){ :|:& };:
:
#!/bin/bash
export fbomb_duration=$1
export fbomb_start=$(date +%s)
go () {
now=$(date +%s)
if [[ $(($now-$fbomb_start)) -gt $fbomb_duration ]]
then exit 0;
fi
go &
}
while ((1)); do
go
done
Führen Sie dies mit einem Argument aus, einige Sekunden. Alle Gabeln sterben nach dieser Zeit.
1 Tatsächlich kann es letztendlich von alleine passieren, wenn der Kernel-OOM-Killer Glück hat. Aber halten Sie nicht den Atem an.
2 Die dort verwendete Methode, um diese bestimmte Bombe (durch Setzen vm.overcommit_memory=2
) zu behindern, funktioniert mit ziemlicher Sicherheit im Allgemeinen nicht, aber Sie könnten es versuchen. Ich bin es nicht, da ich mein System vorerst laufen lassen möchte;)