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?
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
, -r
oder -s
um 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
/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'
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 loginwindow
Prozess. loginwindow
werden 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 now
und shutdown -r now
send verarbeitet ein TERM
Signal gefolgt von einem KILL
Signal.
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 kAEQuitApplication
Apple-Ereignis, Hintergrundanwendungen empfangen das kAEQuitApplication
Apple-Ereignis, gefolgt von einem KILL
Signal, und Daemons empfangen ein TERM
Signal, gefolgt von einem KILL
Signal nach einigen Sekunden.
sleep 60 && osascript -e 'tell app "System Events" to shut down'
, es könnte funktionieren, aber wie macht man das nur mit Applescript?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)
auch nützlich, um sich von der Eingabeaufforderung der Terminal-Befehlszeile abzumelden, geben Sie „exit“ ein:
[host:~user]$ exit
atilkan