Verwenden des Terminalbefehls zum Herunterfahren, Neustarten und Ruhezustand meines Mac?

Ich interessiere mich immer mehr für die Verwendung von Terminal als alternative Möglichkeit, Lösungen auf meinem Mac zu adressieren. Ich habe diese Frage mit dem Titel „Gibt es eine bessere Möglichkeit, OSX herunterzufahren/neu zu starten“ gesehen? .

Daher würde ich gerne wissen:

Wie kann ich meinen Mac ausschließlich mit dem Terminal-Befehl herunterfahren, neu starten und in den Ruhezustand versetzen?

Neustart für Neustart funktioniert auch.

Antworten (4)

Der Befehl, nach dem Sie suchen, ist shutdown . Dies informiert alle Benutzer darüber, dass der Computer heruntergefahren wird, und weist alle Apps an, Dateien usw. zu schließen.

Der Befehl nimmt einen Parameter an -h, -roder -sum den Mac herunterzufahren, neu zu starten oder in den Ruhezustand zu versetzen.

Der Befehl muss als root ausgeführt werden, also müssen Sie sudo.

zB um die Maschine sofort neu zu starten

sudo shutdown -r now

B. die Maschine in 60 Minuten herunterzufahren

sudo shutdown -h +60

Von Kommentaren gibt es zwei Dinge, die angesprochen werden müssen

Das Herunterfahren funktioniert, indem ein Sigterm an alle Prozesse gesendet wird, die sich dann damit befassen sollen, z. B. offene Dateien speichern usw. Wenn sie nicht beendet werden, erhalten sie ein SIGKILL, das sie dazu zwingt, zu sterben, ohne die Möglichkeit zu antworten. Die Signale werden nicht über die normale Schlüsselnachrichtenwarteschlange gesendet, sodass Apps dies separat zu dem Code behandeln müssen, der von Quit im Menü aufgerufen wird. Eine gute App sollte gemeinsamen Code von beiden aufrufen.

Diese andere Antwort zeigt, wie man herunterfährt, als ob man auf die Menüoptionen klickt. Beachten Sie jedoch, dass Apps dieses Herunterfahren abbrechen können

Vielleicht etwas unabhängig von der Frage und dieser Antwort, aber für das, was es wert ist, ist es auch praktisch, meinen Mac vom Terminal aus zu sperren, ähnlich wie das Drücken von Winkey + L in Windows: /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend. Ich habe es in einer Datei, die in meinem .bash_profile wie folgt bezogen wird, mit einem Alias ​​versehen:alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
Sagt es wirklich allen Apps, dass sie Dateien usw. schließen sollen? Ich dachte, es hätte einfach alles umgebracht? Die Manpage stammt von 1998 BSD - hat Apple den Befehl aktualisiert, um nett zur macOS-Software zu sprechen? Nützlich, wenn die Dinge hängen geblieben sind, aber wenn das System gut funktioniert, scheint es, als wäre es "höflicher", dem Anmeldefensterprozess zu sagen, dass er die Tat ausführen soll.
@j-beda Siehe Apple doc developer.apple.com/legacy/library/documentation/Darwin/… - Es sendet zuerst ein SIGTERM, mit dem Apps umgehen sollen, bevor sie ein SIGKILL erhalten. Sehen Sie sich die andere Antwort an, um dies über das Anmeldefenster / die GUI zu tun. Wie würde das Anmeldefenster die Tat ausführen?
Ich bin mir ziemlich sicher, dass das "Herunterfahren" von Unix nicht alle Dinge tut, die der normale Herunterfahren-Prozess der Mac-GUI tut, also in dem Maße, dass Apple es nicht direkt in seiner eigenen Software verwendet, sondern zumindest einige Dinge vor dem Aufrufen tut it, hat es einige Nachteile, es direkt aufzurufen. Ich glaube, dass die "Loginwindow"-App auch dann verfügbar ist, wenn sie sich nicht im GUI-Anmeldefenster befindet, und über das Befehlszeilentool "osascript" aufgerufen werden kann. Es ist jedoch nicht unfehlbar, daher muss man möglicherweise trotzdem "shutdown" aufrufen (oder einzelne Kills an bestimmte Prozesse senden, nehme ich an).
Der Signalmechanismus fügt keine Nachricht in die Nachrichtenwarteschlange von Apps ein, wie es beim normalen Schließen der Fall ist, aber Apps sollten sich trotzdem damit befassen. dh wenn es nicht richtig funktioniert, ist das die Schuld der Apps. für einen Versuch der GUI siehe die andere Antwort. Aber ich finde, dass es oft eine App gibt, die sich weigert zu sterben und den Beendigungsprozess abbricht, so dass das Herunterfahren der einzige garantierte Weg ist
Wenn Sie diesen Befehl verwenden, scheint es nicht, GUI-Apps zu beenden. Ich habe alle Kommentare gelesen, dass es die Signale sendet, die dazu führen sollten, dass sie schnell ordnungsgemäß beendet werden, aber was Sie SEHEN, wenn Sie diesen Befehl ausführen, ist, dass die gesamte GUI sofort verschwindet. Macht mich nervös, diesen Befehl zu verwenden.
@l008com ja das stimmt. Der Befehl sendet nicht jeder App das Äquivalent der Option zum Beenden des Menüs, sondern sendet jedem Prozess, nicht nur Apps, ein Signal, mit dem sich die App befassen soll. Aber ich denke, Sie haben Recht zu vermuten, dass viele Aps sich nicht damit befassen. Aber andererseits ist es besser, als dass der Mac alle ein oder zwei Monate stirbt. Ich vermute einen Stromausfall. Gehen Sie also davon aus, dass Ihr Computer jederzeit abstürzen wird

Herunterfahren, ohne einen Bestätigungsdialog anzuzeigen:

osascript -e 'tell app "System Events" to shut down'

Herunterfahren nach Anzeige eines Bestätigungsdialogs:

osascript -e 'tell app "loginwindow" to «event aevtrsdn»'

Ohne Bestätigungsdialog neu starten:

osascript -e 'tell app "System Events" to restart'

Neustart nach Anzeige eines Bestätigungsdialogs:

osascript -e 'tell app "loginwindow" to «event aevtrrst»'

Ohne Bestätigungsdialog abmelden:

osascript -e 'tell app "System Events" to  «event aevtrlgo»'

Melden Sie sich ab, nachdem Sie einen Bestätigungsdialog angezeigt haben:

osascript -e 'tell app "System Events" to log out'

Schlafen gehen ( pmset):

pmset sleepnow

Schlafen gehen (AppleScript):

osascript -e 'tell app "System Events" to sleep'

Anzeigen in den Ruhezustand versetzen (10.9 und höher):

pmset displaysleepnow

Die vier Buchstabencodes für die Apple-Ereignisse sind in aufgelistet AERegistry.h.

Alle oben genannten Systemereignisse-Befehle senden Apple-Ereignisse an den loginwindowProzess. loginwindowwerden dieselben Apple-Ereignisse wie oben gesendet, wenn Sie sich abmelden, neu starten, herunterfahren oder den Mac normal in den Ruhezustand versetzen. Siehe Technische Fragen und Antworten QA1134: Programmatisch verursachender Neustart, Herunterfahren und/oder Abmelden .

Gemäß man shutdown, shutdown -h nowund shutdown -r nowsend verarbeitet ein TERMSignal gefolgt von einem KILLSignal.

Gemäß dem Daemons and Services Programming Guideloginwindow wird Prozessen, die eine plötzliche Beendigung unterstützen, ein Signal gesendet , wenn Sie sagen , dass sie sich abmelden sollen KILL, und Prozesse, die eine plötzliche Beendigung nicht unterstützen, werden auf unterschiedliche Weise beendet: Cocoa-Anwendungen erhalten die applicationShouldTerminate:Delegate-Methode, Vordergrundanwendungen empfangen das kAEQuitApplicationApple-Ereignis, Hintergrundanwendungen empfangen das kAEQuitApplicationApple-Ereignis, gefolgt von einem KILLSignal, und Daemons empfangen ein TERMSignal, gefolgt von einem KILLSignal nach einigen Sekunden.

Wie wäre es mit dem Herunterfahren mit Applescript nach einem Timeout? Ich nehme an sleep 60 && osascript -e 'tell app "System Events" to shut down', es könnte funktionieren, aber wie macht man das nur mit Applescript?
Also habe ich versucht, die Applescript-Technik zu verwenden, um einen skriptgesteuerten Soft-Neustart durchzuführen. Das Problem ist, wenn File-Sharing-Benutzer mit dem Computer verbunden sind, wird er nicht neu gestartet. Es wirft eine Meldung "Es sind Benutzer verbunden ..." aus, die KEINEN Timer eingebaut hat. Gibt es also eine Möglichkeit, zuerst alle Filesharing-Benutzer zu dumpen, bevor dieser Befehl ausgeführt wird?

Sofort abschalten:

sudo shutdown -h now

Wenn Sie das Herunterfahren verzögern möchten, können Sie stattdessen die folgende Befehlssyntax verwenden:

sudo shutdown -h +30

(-h Parameter Zeit zum Herunterfahren einstellen, wobei (+)30 Minuten zum Stoppen des Systems)

Die in Ihrer Antwort enthaltenen Informationen sind bereits in der akzeptierten Antwort enthalten, und daher besteht keine Notwendigkeit, das bereits Erwähnte und Akzeptierte zu wiederholen.
@ user3439894 Nein, ist es nicht.

auch nützlich, um sich von der Eingabeaufforderung der Terminal-Befehlszeile abzumelden, geben Sie „exit“ ein:

[host:~user]$ exit
Auf welche Weise wird der Mac heruntergefahren, neu gestartet oder in den Ruhezustand versetzt?