sudo shutdown -h now
Ich schlage nicht vor, Folgendes zu tun, wenn Sie nicht aus ganz besonderen Gründen gezwungen sind:
kill -SEGV 1 # should generate a core dumps and kernel panic
kill -ABRT 1 # should generate a core dumps and kernel panic
kill -9 1 # On old systems worked nowadays not
Es ist grob, brutal und kann als ähnliches Äquivalent zum Herausziehen des Netzkabels angesehen werden ...
Der richtige Weg ist shutdown -h now
mit sudo
vorher bei Bedarf.
Vielleicht sollte ich den rechtmäßigen Weg sagen; siehe unten oder besser tl;dr.
Ein paar Worte mehr , auch bekannt als Die Geschichte, Kapitel I
Am Anfang war die Init und wird es bis zum Ende sein.
Das ganze Linux hängt von der liebevollen Pflege ab von init . Trotzdem und nicht ohne eine gewisse Undankbarkeit gab es eine Zeit, in der der gute Gott root user kann diese Liebe verraten und plötzlich kill
init mit einem unbestreitbaren (-9
) bestellen.
(Das Buch der Etikette schreibt für Benutzer von Grafen, Herzögen und Markgrafen vor vor einem sudo
aufzurufen ).
Dann haben einige Zauberer einen Zauber gemacht, um init zu schützen (aus dem Buch von man 2 init
)
Die einzigen Signale, die an die Prozess-ID 1, den Init-Prozess, gesendet werden können, sind diejenigen, für die init explizit Signal-Handler installiert hat. Dies geschieht, um sicherzustellen, dass das System nicht versehentlich heruntergefahren wird.
diese Init verarbeitet 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32)
Also der guter Gott Root-Benutzer Erfahren Sie die Neuigkeiten und ändern Sie den Befehl in kill -ABRT 1
oder kill -SEGV 1
die normalerweise eine Kernel Panic und einen Core Dump erzeugen.
Es funktioniert, weil init ist der erste Prozess, der ausgeführt wird, und nimmt die PID-Nummer 1 an.
Das ist unsicher, unklug und Sie glauben, es ist ein Vorbote eines schlechten Omens und ein Fluch, aber wenn Sie es nicht materiell können, legen Sie die Hände auf und ziehen Sie den Stecker heraus ...
Der Fluch :Es wird nicht in das Protokoll geschrieben, es wird nicht alle Prozesse beenden und auf ihr Ende warten, es wird nicht auf die Festplatte schreiben und die Inodes nicht richtig aktualisieren, noch werden die Dateisysteme ausgehängt; Es macht nichts, es speichert die Optionen der grafischen Fenster und der Shell-Geschichten und viele andere jenseits unserer Vorstellungskraft ... wie gesagt, ein nahes Äquivalent zum Abziehen des Netzkabels oder des Akkus bei einem Laptop.
Der richtige Weg
Die rechtmäßigen Der (korrekte) Weg ist die Verwendung von shutdown
sudo shutdown -h now
Shutdown sorgt dafür, dass das System sicher heruntergefahren wird. Alle angemeldeten Benutzer werden benachrichtigt, dass das System heruntergefahren wird und...
aber mit -h now
Sie werden nicht genug Zeit haben, um so viel zu tun...
Ein paar Worte mehr , auch bekannt als Die Geschichte, Kapitel II
Es waren einmal einige logische Schritte vom Himmel über den Unix-Leuten:
Sobald Systemprozesse beendet und Dateisysteme ausgehängt wurden, wird das System angehalten/ausgeschaltet oder automatisch neu gestartet. Dies geschieht mit dem Befehl halt oder reboot, der Änderungen auf die Festplatten synchronisiert und dann das eigentliche Anhalten/Ausschalten oder Neustarten durchführt.
In der Tat traut man heutzutage der Existenz der drei Moirai der Linux-Welt nicht mehr zu , reboot
,poweroff
und halt
:die moderne Wissenschaft von ls -l $(which poweroff halt reboot)
und die von man reboot
, wirft ein neues Licht auf dieses dunkle Zeitalter und enthüllt uns, dass es nur einen wahren Befehl gibt, der alle ihre Optionen analysiert, sodass wir endlich frei sind, Aktionen zu fordern, die ihren Befehlsnamen widersprechen! (halt -p
oder reboot -p
für poweroff
, shutdown -r
für reboot
...)
Jetzt, wo alles klar und gemütlich zu sein schien, behaupten Gerüchte das in der Unterwelt von systemd toolset eine Revolution wurde durchgeführt und die ganze Überwelt im Unklaren gelassen . Dank einer Armee von Abwärtskompatibilitäts-Shims wir haben überhaupt nicht bemerkt, dass reboot, poweroff, halt und sogar telinit und shutdown bereits an das neue king systemctl gebunden sind. Bitte hören Sie sich die ganze Geschichte mit der Originalstimme von JdeBP The Bard an, weil ich keine Luft mehr habe.
Wenn Sie Anhänger des Ubuntu - Kultes sind , werden Sie sich all dieser Behauptungen vielleicht noch eine Weile bewusst sein .
Die Mittelerde von halt -f
, init
, telinit
, systemctl
Lösung schneller als die richtige suchen, aber ebenso weise.
systemctl --force --force poweroff # the most close to kill -9 1
systemctl --force poweroff # rough but still safe
sudo halt -f # rough
sudo telinit 0 # or 6 # safe
kill -SIGINT 1 # cause reboot as the reboot command
kill -SIGRTMIN+4 1 # cause shutdown as the halt command
Ob Sie sich unter systemd befinden oder nicht, Sie sollten in der Lage sein, den Computer zu stoppen, ohne alle korrekten Shutdown-Prozeduren aufzurufen (und so schneller):
-
halt -f
:Angabe der Option-f
(Beachten Sie, dass Sie-f
benötigen um das Herunterfahren zu vermeiden) mit dem obigen Befehl, mitsudo poweroff -f
oder vielleicht sogar mitsudo reboot -f -h
.Tatsächlich können wir abman reboot
lesen (und Äquivalente) über die Notwendigkeit, die Option-f
anzugeben um das Herunterfahren zu vermeiden:Bei Aufruf mit --force oder in Runlevel 0 oder 6 ruft dieses Tool den reboot(2)-Systemaufruf selbst auf (mit übergebenem REBOOTCOMMAND-Argument) und startet das System direkt neu .
Andernfalls wird einfach das shutdown(8)-Tool aufgerufen mit den entsprechenden Argumenten, ohne das REBOOTCOMMAND-Argument zu übergeben.
-f, --force
Ruft shutdown(8) nicht auf und führt stattdessen die eigentliche Aktion aus, die Sie vom Namen her erwarten würden . -
Außerdem können Sie
telinit
verwenden (oderinit
direkt)sudo telinit 0 # or 6
um init zu sagen, dass es den Runlevel ändern soll... aber wenn ja, warum es nicht direkt beenden?
-
Unter systemd können Sie die unkluge doppelte Option
--force --force
verwendensystemctl --force --force poweroff
Lesen aus dem systemctl-Handbuch
-f, --force
Überschreiben Sie bei Verwendung mit enable alle vorhandenen widersprüchlichen symbolischen Links.
Bei Verwendung mithalt
,poweroff
,reboot
oder kexec, führen Sie die ausgewählte Operation aus, ohne alle Einheiten herunterzufahren. Alle Prozesse werden jedoch zwangsweise beendet und alle Dateisysteme werden ausgehängt oder schreibgeschützt neu eingehängt. Dies ist daher eine drastische, aber relativ sichere Option, um einen sofortigen Neustart anzufordern. Wenn --force für diese Operationen zweimal angegeben wird, werden sie sofort ausgeführt, ohne dass Prozesse beendet oder Dateisysteme ausgehängt werden. Warnung:Die zweimalige Angabe von --force bei einer dieser Operationen kann zu Datenverlust führen.
Ps> Lassen Sie sich von den Schwanzvarianten von JdeBP The Bard inspirieren.
Sie können die Maschine sofort ausschalten, ohne Festplatten zu synchronisieren, indem Sie als root „o“ in /proc/sysrq-trigger schreiben.
Als Shell-Skript würde es in etwa so aussehen
#!/bin/sh
echo o >/proc/sysrq-trigger
Wenn Sie Berechtigungen für /proc/sysrq-trigger haben, müssen Sie es nicht über sysctl aktivieren. Diese Option wirkt sich nur auf das Auslösen per Tastatur aus.
Ich empfehle nicht, dies auf einer Maschine mit einem Dateisystem zu tun, das Sie später lesen möchten.
Ich verwende dies in Google Compute Engine, um Vorlageninstanzen kurz vor der Zehn-Minuten-Marke abzuschlachten, um die Kosteneffektivität von Cluster-Jobs zu maximieren, es funktioniert hervorragend.