Ich habe eine Test-VM eingerichtet, um die Wirkung von Gabelbomben zu testen. Also habe ich limits.conf
folgendes für den root
Benutzer bearbeitet :
root hard nproc 512
Jetzt lasse ich eine Gabelbombe so fallen:
:(){ :|:& };:
Nach einer Weile (von der ich glaube, dass es dauert, bis die Grenze von 512 erreicht ist) wird der folgende Fehler angezeigt:
Dies geht weiter, ohne anzuhalten. Gibt es überhaupt eine Möglichkeit, dies zu stoppen, ohne den Computer neu zu starten?
Antworten:
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
:(){ :|:& };:
: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;)quelle
Während der Entwicklung der Antwort auf diese Frage mit dem Titel: Wo ist die Gabel () auf der Gabelbombe: () {: |: &};:?Ich habe eine so genannte Sicherungsbombe mit verzögerter Gabel zusammengestellt, die leichter zu töten war.
Während ich diese Antwort entwickelte, konnte ich außerdem regelmäßig eine Gabelbombe stoppen, indem ich alle Prozesse abbrach. Es war einfacher und wiederholbarer als ich erwartet hätte.
Verwendete Methoden
Es ist schon eine Weile her, dass ich diese Antwort geschrieben habe, daher bin ich mir jetzt nicht 100% sicher, aber ich glaube, ich habe diese Methode angewendet:
Es würde ein bisschen stehen bleiben und auf einen Prozess warten, aber schließlich konnte es laufen. Außerdem würde ich die übergeordnete Prozess-ID vor dem Starten der Gabelbombe notieren und dies auch tun:
Dies ist die übergeordnete Prozess-ID (PPID), von der aus die Gabelbombe ausgeführt wurde. Diese Methode würde alle untergeordneten Prozesse ausschalten, was dazu führen würde, dass sie alle kaskadieren und sterben.
quelle
while ((1)); do killall myscript.sh; done
.Ich glaube, Sie könnten das tun, was in der Antwort von hier vorgeschlagen wird, vorausgesetzt, Sie haben Zugriff auf Shell.
quelle