Wie überlebt Systemd einen Kill -9?

28

Zwischen den letzten Fragen "Warum beendet 'kill -9 0' meine Konsolensitzung?" Und "Wie bekomme ich eine Kernel-Panik?" Habe ich einen Bur unter den Sattel bekommen und mich kill -9 1an einem meist aktuellen Arch Linux-Laptop versucht . Ich habe es als Benutzer-ID "root" gemacht.

Ich habe mit einem Absturz, einer Panik oder einem Herunterfahren gerechnet, aber es ist nichts passiert. Ich tat es kill -9 1wieder, ohne Wirkung.

Arch-Linux-Maschinen laufen systemdheutzutage. Wie systemdüberlebt man einen Kill -9? Ich gehe davon aus, dass es im Linux 3.7-Kernel Sonderfallcode gibt, aber vielleicht gibt es einen anderen Grund, an den ich nicht gedacht habe.

Was ist mit anderen Dingen, die mit PID 1 laufen? initIch glaube, dass Slackware immer noch verwendet wird , aber ich habe Angst, es auf meinem Produktions-Slackware-Server zu versuchen. DD-WRT auf meinem WLAN-Router führt / sbin / init aus.

Bruce Ediger
quelle

Antworten:

33

Von man 2 kill:

Die einzigen Signale, die an die Prozess-ID 1, den Init-Prozess, gesendet werden können, sind solche, für die init explizit Signalhandler installiert hat. Auf diese Weise wird sichergestellt, dass das System nicht versehentlich heruntergefahren wird.

Das heißt, es ist möglich init, beim Empfangen zu tun, was immer es will SIGKILL(einschließlich Beenden), aber systemds init installiert keinen Signal-Handler dafür, so dass nichts passiert.

Chris Down
quelle
4
Danke, dass du das bemerkt hast. Ist das Linux-spezifisch? Ich erinnere mich an einen Absturz einer SunOS-Workstation in den frühen 90ern, als ich init versehentlich getötet habe. Oder nicht. In meiner Jugend war ich viel rücksichtsloser.
Bruce Ediger
1
@BruceEdiger, auch ich scheine mich zu erinnern, in der Lage zu sein kill -9 init, eine Kernel-Panik auszulösen . Klingt wie es irgendwann geändert.
Psusi
2
@BruceEdiger - Ich habe es für einen AIX-Server und einen HP-UX-Server versucht. Beide haben eine Fehlermeldung zurückgegeben: kill: 1: 0403-068 Das Signal ist für diesen Prozess ungültig ODER kill: 1: Der angegebene Prozess existiert nicht. In der Manpage wurde ausdrücklich darauf hingewiesen, dass dies zu einem Fehler führt. Mir wird von einer Reihe von Leuten gesagt, dass dies früher getan werden könnte - aber in den letzten 10 Jahren ist es niemandem gelungen.
DarkHeart
2
@BruceEdiger Nach einigen Recherchen handelt es sich um eine neuere Entwicklung (zumindest im Hinblick auf die Lebensdauer von Unix). Leider war ich in den frühen 90ern nicht mehr am Leben, und als es passierte, lag das außerhalb meines Wissensbereichs. Es wäre jedoch interessant herauszufinden, wie es scheint, dass fast alle modernen Unices dieses Verhalten standardmäßig übernommen haben.
Chris Down