Verwenden des Terminal-Befehls zum Herunterfahren, Neustarten und Ausschalten des Mac?

120

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

Ich würde deshalb gerne wissen:

Wie kann ich meinen Mac mit dem Befehl "Terminal" exklusiv herunterfahren, neu starten und in den Ruhezustand versetzen?

Simon
quelle
Neustart zum Neustart funktioniert auch.
Atilkan

Antworten:

147

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

Der Befehl benötigt einen Parameter -h, -r oder -s, um den Mac herunterzufahren, neu zu starten oder in den Ruhezustand zu versetzen.

Der Befehl muss als root ausgeführt werden, damit Sie sudo verwenden können.

zB um die Maschine sofort neu zu starten

sudo shutdown -r now

zB um die Maschine in 60 Minuten auszuschalten

sudo shutdown -h +60

Aus Kommentaren ergeben sich zwei Punkte, 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 zwingt, ohne Antwortmöglichkeit zu sterben. Die Signale werden nicht über die normale Schlüssel-Nachrichtenwarteschlange gesendet, daher müssen Apps diese getrennt von dem Code behandeln, der vom Verlassen des Menüs aufgerufen wird. Eine gute App sollte gemeinsamen Code von beiden aufrufen.

Diese andere Antwort zeigt, wie Sie herunterfahren, als ob Sie die Menüoptionen treffen. Beachten Sie jedoch, dass Apps das Herunterfahren abbrechen können

user151019
quelle
2
Vielleicht etwas in keinem Zusammenhang mit der Frage und dieser Antwort, aber für das, was es wert ist das ist auch praktisch für mich , meinen Mac aus dem Terminal zu sperren, die Art wie Schlagen Winkey + L in Windows: /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend. Ich habe es Alias ​​in einer Datei, die in meinem .bash_profile wie folgt bezogen wird:alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
Rubynorails
Weist es wirklich alle Apps an, Dateien usw. zu schließen? Ich dachte, es hat einfach alles umgebracht? Die Manpage ist von 1998 BSD - hat Apple den Befehl aktualisiert, um nett mit macOS-Software zu sprechen? Nützlich, wenn Dinge hängen geblieben sind, aber wenn das System gut funktioniert, scheint es "höflicher" zu sein, dem Anmeldefenster zu sagen, dass es die Tat tun soll.
J-Beda
@ j-beda Siehe Apple doc developer.apple.com/legacy/library/documentation/Darwin/… - Zuerst wird ein SIGTERM gesendet, mit dem sich Apps befassen sollten, bevor sie ein SIGKILL erhalten. Siehe die andere Antwort, um dies über das Anmeldefenster / GUI zu tun. Wie würde das Anmeldefenster die Tat tatsächlich tun?
user151019
Ich bin mir ziemlich sicher, dass das "Herunterfahren" von Unix nicht alle Aufgaben erledigt, die das reguläre Herunterfahren der Mac-Benutzeroberfläche erledigt, insofern, als Apple es nicht direkt in seiner eigenen Software verwendet, sondern zumindest einige Aufgaben vor dem Aufrufen erledigt Es gibt einige Nachteile, wenn man es direkt aufruft. Ich glaube, dass die App "loginwindow" auch außerhalb des GUI-Anmeldefensters verfügbar ist und über das Befehlszeilentool "osascript" aufgerufen werden kann. Es ist jedoch nicht unfehlbar, daher muss man möglicherweise ohnehin "Herunterfahren" aufrufen (oder einzelne Kills an bestimmte Prozesse senden, nehme ich an).
J-Beda
Der Signalmechanismus stellt keine Nachricht in die Apps-Nachrichtenwarteschlange, wie dies beim normalen Schließen der Fall ist. Apps sollten sich jedoch weiterhin darum kümmern. dh wenn es nicht richtig funktioniert, ist das die Schuld der Apps. Für einige Versuche der grafischen Benutzeroberfläche siehe die andere Antwort. Aber ich stelle fest, dass es oft eine App gibt, die sich weigert zu sterben und den Beendigungsprozess abbricht, so dass das Herunterfahren die einzige Möglichkeit ist
user151019
94

Fahren Sie das System herunter, ohne einen Bestätigungsdialog anzuzeigen:

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

Nach dem Anzeigen eines Bestätigungsdialogs herunterfahren:

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

Neustart ohne Anzeige eines Bestätigungsdialogs:

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

Neustart nach Anzeige eines Bestätigungsdialogs:

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

Melden Sie sich ab, ohne einen Bestätigungsdialog anzuzeigen:

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

Melden Sie sich nach dem Anzeigen eines Bestätigungsdialogs ab:

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

Geh schlafen ( pmset):

pmset sleepnow

Geh schlafen (AppleScript):

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

Versetzen Sie Displays in den Ruhezustand (10.9 und höher):

pmset displaysleepnow

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

Alle Systemereignisse Befehle oben schicken Apple - Ereignisse an den loginwindowProzess. loginwindowEs werden dieselben Apple-Ereignisse wie oben gesendet, wenn Sie sich abmelden, neu starten, herunterfahren oder den Mac normal in den Energiesparmodus versetzen. Siehe Technische Fragen und Antworten QA1134: Programmgesteuertes Auslösen von Neustart, Herunterfahren und / oder Abmelden .

Laut man shutdown, shutdown -h nowund shutdown -r nowsendet verarbeitet ein TERMSignal , gefolgt von einem KILLSignal.

Laut Daemons and Services Programming Guide wird beim Abmelden loginwindowein KILLSignal an Prozesse gesendet, die eine plötzliche Beendigung unterstützen , und Prozesse, die eine plötzliche Beendigung nicht unterstützen, werden auf verschiedene Arten beendet: Kakaoanwendungen erhalten die applicationShouldTerminate:Delegierungsmethode, Vordergrundanwendungen Empfangen des kAEQuitApplicationApple-Ereignisses, Hintergrundanwendungen empfangen das kAEQuitApplicationApple-Ereignis, gefolgt von einem KILLSignal, und Daemons empfangen nach einigen Sekunden ein TERMSignal, gefolgt von einem KILLSignal.

Lri
quelle
-4

Sofort herunterfahren:

**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 Zeit für das Herunterfahren des Parameters, wobei (+) 30 Minuten zum Stoppen des Systems erforderlich sind)

CamelTM
quelle
2
Die in Ihrer Antwort enthaltenen Informationen sind bereits in der akzeptierten Antwort enthalten, sodass nicht wiederholt werden muss, was bereits erwähnt und akzeptiert wurde.
user3439894
-11

auch nützlich, um sich von der Eingabeaufforderung des Terminals abzumelden, geben Sie "exit" ein:

[host:~user]$ exit
holbein
quelle
10
Auf welche Weise wird der Mac heruntergefahren, neu gestartet oder in den Ruhezustand versetzt?
bmike
In beiden Fällen melde ich mich lieber Ctrl-Dab, da die Befehlszeilenhistorie dadurch nicht verschmutzt wird.
Mwfearnley