168 votes

Utiliser la commande Terminal pour arrêter, redémarrer et mettre en veille mon Mac ?

Je m'intéresse de plus en plus à l'utilisation de Terminal comme moyen alternatif d'aborder les solutions sur mon Mac. J'ai vu cette question intitulée "Y a-t-il une meilleure façon d'arrêter/redémarrer OSX ?" .

Je voudrais donc savoir :

Comment éteindre, redémarrer et mettre en veille mon Mac en utilisant exclusivement la commande Terminal ?

0 votes

Reboot pour redémarrer fonctionne également.

191voto

yoliho Points 340

La commande que vous recherchez est arrêt . Il 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, donc vous devez utiliser sudo .

par exemple, pour redémarrer la machine immédiatement

sudo shutdown -r now

par exemple, pour arrêter la machine dans 60 minutes

sudo shutdown -h +60

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

Le fonctionnement de l'arrêt consiste à envoyer un sigterm à tous les processus qui doivent alors s'en occuper, par exemple sauvegarder les fichiers ouverts, etc. S'ils ne se retirent 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 normale des messages de la touche, les applications doivent donc gérer cela séparément du code appelé par quit dans le menu. Une bonne application devrait appeler du code commun à partir des deux.

Este autre réponse montre comment s'arrêter comme si vous aviez touché les options du menu. Mais notez que les applications peuvent annuler cet arrêt.

2 votes

Peut-être que cela n'a pas grand-chose à voir avec la question et la réponse, mais pour ce que cela vaut, cela me sert aussi à verrouiller mon Mac à partir du Terminal, un peu comme si je pressais Winkey+L dans Windows : /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend . Je l'ai aliasé dans un fichier qui se trouve dans mon .bash_profile comme suit : alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'

0 votes

Est-ce que ça dit vraiment "à toutes les applications de fermer les fichiers, etc." ? Je pensais que ça tuait tout ? La page de manuel date de 1998 BSD - est-ce qu'Apple a mis à jour la commande pour qu'elle soit plus agréable à utiliser pour les logiciels MacOS ? Utile si les choses se sont bloquées, mais si le système fonctionne bien, il semble que dire au processus loginwindow de faire le travail serait plus "poli".

0 votes

@j-beda Voir le document Apple developer.apple.com/legacy/library/documentation/Darwin/ - Il envoie d'abord un SIGTERM que les applications doivent traiter avant de recevoir un SIGKILL. Voir l'autre réponse pour le faire via la fenêtre de login/GUI En fait, comment la fenêtre de login ferait-elle l'affaire ?

131voto

Arrêter sans afficher une boîte de dialogue de confirmation :

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

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

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

Redémarrer sans afficher une 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»'

Se déconnecter sans afficher une boîte de dialogue de confirmation :

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

Se déconnecter après avoir affiché une boîte de dialogue de confirmation :

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

Dormir ( pmset ) :

pmset sleepnow

Se mettre en veille (AppleScript) :

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

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

pmset displaysleepnow

Les codes à quatre lettres pour les événements Apple sont énumérés dans la liste suivante AERegistry.h .

Toutes les commandes d'événements système ci-dessus envoient des événements Apple à l'adresse suivante loginwindow processus. loginwindow reçoit les mêmes événements Apple que ci-dessus lorsque vous vous déconnectez, redémarrez, éteignez ou mettez le Mac en veille normalement. Voir Q&A technique QA1134 : Provoquer par programme un redémarrage, un arrêt et/ou une déconnexion. .

Selon man shutdown , shutdown -h now y shutdown -r now envoyer aux processus un TERM suivi d'un signal KILL signal.

Selon le Guide de programmation des démons et services quand vous dites loginwindow pour se déconnecter, les processus qui supportent l'arrêt soudain sont envoyés un KILL et les processus qui ne prennent pas en charge la terminaison soudaine sont terminés de différentes manières : Les applications Cocoa reçoivent le signal applicationShouldTerminate: les applications d'avant-plan reçoivent la méthode de délégation kAEQuitApplication Apple, les applications en arrière-plan reçoivent le kAEQuitApplication Événement Apple suivi d'un KILL et les démons reçoivent un signal TERM suivi d'un signal KILL après quelques secondes.

0 votes

Que diriez-vous de vous éteindre avec applescript après un délai d'attente ? Je suppose sleep 60 && osascript -e 'tell app "System Events" to shut down' cela pourrait fonctionner mais comment le faire avec applescript uniquement ?

0 votes

J'ai donc essayé d'utiliser la technique applescript pour effectuer un redémarrage progressif. Le problème est que si des utilisateurs de partage de fichiers sont connectés à la machine, celle-ci ne redémarre pas. Il affiche un message "il y a des utilisateurs connectés...", un message qui n'a PAS de minuterie intégrée. Existe-t-il donc un moyen de vider tous les utilisateurs de partage de fichiers avant d'exécuter cette commande ?

-3voto

CamelTM Points 121

Arrêtez immédiatement :

sudo shutdown -h now

Si vous avez envie de retarder l'arrêt, vous pouvez utiliser la syntaxe de commande suivante à la place :

sudo shutdown -h +30

(le paramètre -h fixe le temps d'arrêt, où (+)30 minutes pour arrêter le système)

8 votes

Les informations présentées dans votre réponse sont déjà incluses dans la réponse acceptée, et il n'est donc pas nécessaire de répéter ce qui est déjà mentionné et accepté.

0 votes

@user3439894 Non, ça ne l'est pas.

-15voto

holbein Points 1

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

[host:~user]$ exit

19 votes

De quelle manière cela permet-il d'éteindre, de redémarrer ou de mettre en veille le Mac ?

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X