Utilisation de la commande du terminal pour arrêter, redémarrer et mettre en veille mon Mac?

120

L’utilisation de Terminal comme moyen alternatif d’adresser des solutions sur mon Mac m'intéresse de plus en plus. J'ai vu cette question intitulée "Existe-t-il un meilleur moyen d'arrêter / de redémarrer OSX?" .

J'aimerais donc savoir:

Comment éteindre, redémarrer et mettre en veille mon Mac à l'aide de la commande Terminal exclusivement?

Simon
la source
redémarrer pour redémarrer fonctionne également.
Atilkan

Réponses:

147

La commande que vous recherchez est shutdown . Cela informe tous les utilisateurs que la machine va être arrêtée et demande à toutes les applications de fermer les fichiers, etc.

La commande prend un paramètre -h, -r ou -s pour éteindre, redémarrer ou mettre en veille le Mac.

La commande doit être exécutée en tant que root, vous devez donc utiliser sudo.

par exemple pour redémarrer la machine immédiatement

sudo shutdown -r now

par exemple, arrêter la machine en 60 minutes

sudo shutdown -h +60

D'après les commentaires, il y a deux choses à aborder

Comment shutdown fonctionne en envoyant un sigterm à tous les processus qui devraient ensuite gérer cela, par exemple sauvegarder les fichiers ouverts, etc. S'ils ne se terminent pas, ils recevront un SIGKILL qui les forcera à mourir sans possibilité de répondre. Les signaux ne sont pas envoyés via la file d'attente de messages de clé normale. Par conséquent, les applications doivent le gérer séparément du code appelé à partir de quitter dans le menu. Une bonne application devrait appeler un code commun des deux.

Cette autre réponse montre comment s’arrêter comme si vous appuyez sur les options du menu. Mais notez que les applications peuvent annuler cet arrêt

utilisateur151019
la source
2
Peut - être un peu sans rapport avec la question et cette réponse, mais pour ce que ça vaut c'est également très pratique pour moi de verrouiller mon Mac à partir du terminal, un peu comme frapper + L Winkey dans Windows: /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend. Je l'ai aliasé dans un fichier qui provient de mon fichier .bash_profile comme suit:alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
rubynorails
Est-ce vraiment "dire à toutes les applications de fermer les fichiers, etc."? Je pensais que ça venait de tout tuer? La page de manuel date de 1998 BSD - Apple a-t-il mis à jour la commande pour parler gentiment aux logiciels macOS? Utile si les choses se sont arrêtées, mais si le système fonctionne bien, il semble que dire au processus de loginwindow de faire l'acte serait plus "poli".
j-beda
@ j-beda Voir le document Apple developer.apple.com/legacy/library/ documentation / Darwin / ... - Il envoie d'abord un SIGTERM avec lequel les applications doivent traiter avant de recevoir un SIGKILL. Voir l’autre réponse pour le faire via la fenêtre de connexion / GUI En fait, comment la fenêtre de connexion ferait-elle l’acte?
user151019
Je suis à peu près sûr que l’arrêt Unix ne fait pas tout ce que le processus d’arrêt classique de l’interface graphique Mac fait, donc dans la mesure où Apple ne l’utilise pas directement dans son propre logiciel, mais au minimum il effectue des choses avant d’invoquer. il y a un inconvénient à l'invoquer directement. Je crois que l'application "loginwindow" est disponible même en dehors de la fenêtre de connexion de l'interface graphique, et peut être appelée via l'outil "osascript" de la ligne de commande. Ce n'est pas infaillible cependant, donc on peut avoir besoin d'invoquer "shutdown" de toute façon (ou d'envoyer des destructions individuelles à des processus spécifiques, je suppose).
j-beda
Le mécanisme de signal ne place pas un message dans la file de messages de l'application comme le ferait une fermeture normale, mais les applications doivent tout de même le gérer. c'est-à-dire que si cela ne fonctionne pas correctement, c'est la faute de l'application. pour une tentative d’interface graphique, voir l’autre réponse. Mais je trouve qu'il y a souvent une application qui refuse de mourir et annule le processus de cessation, alors l'arrêt est la seule façon
guranettée
95

Arrêtez sans afficher de boîte de dialogue de confirmation:

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

Arrêtez après avoir affiché une boîte de dialogue de confirmation:

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

Redémarrez sans afficher de boîte de dialogue de confirmation:

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

Redémarrez après avoir affiché une boîte de dialogue de confirmation:

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

Déconnectez-vous sans afficher de boîte de dialogue de confirmation:

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

Déconnectez-vous après avoir affiché une boîte de dialogue de confirmation:

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

Aller dormir ( pmset):

pmset sleepnow

Aller dormir (AppleScript):

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

Mettre les écrans en veille (10.9 et plus tard):

pmset displaysleepnow

Les codes à quatre lettres des événements Apple sont répertoriés dans AERegistry.h.

Toutes les commandes d'événements système ci-dessus envoient des événements Apple au loginwindowprocessus. loginwindowreçoit les mêmes événements Apple que ci-dessus lorsque vous vous déconnectez, redémarrez, arrêtez ou mettez le Mac en veille normalement. Reportez-vous aux Questions techniques QA1134: cause de redémarrage, d'arrêt et / ou de déconnexion par programme .

Selon man shutdown, shutdown -h nowet shutdown -r nowsend traite un TERMsignal suivi d’un KILLsignal.

Selon le Guide de programmation Daemons and Services , lorsque vous demandez la déconnexion loginwindow, les processus prenant en charge la terminaison soudaine sont envoyés à un KILLsignal et les processus ne prenant pas en charge la terminaison soudaine sont terminés de différentes manières: les applications Cocoa reçoivent la applicationShouldTerminate:méthode déléguée, les applications de premier plan recevez l' kAEQuitApplicationévénement Apple, les applications d'arrière-plan reçoivent l' kAEQuitApplicationévénement Apple suivi d'un KILLsignal et les démons reçoivent un TERMsignal suivi d'un KILLsignal après quelques secondes.

Lri
la source
-4

Arrêter immédiatement:

**sudo shutdown -h now**

Si vous souhaitez mettre un délai à l’arrêt, vous pouvez utiliser la syntaxe de commande suivante:

**sudo shutdown -h +30**

(paramètre -h: durée d'arrêt du système, où (+) 30 minutes pour arrêter le système)

CamelTM
la source
2
Les informations présentées dans votre réponse sont déjà incluses dans la réponse acceptée et, par conséquent, il n’est pas nécessaire de répéter ce qui est déjà mentionné et accepté.
user3439894
-11

Également utile, pour vous déconnecter de la ligne de commande du terminal, tapez 'exit':

[host:~user]$ exit
Holbein
la source
10
Comment cela éteint-il, redémarre-t-il ou met-il le sommeil en veille?
bmike
Quoi qu'il en soit, je préfère me Ctrl-Ddéconnecter, car cela ne gâche pas l'historique de la ligne de commande.
mwfearnley