Usando o comando Terminal para desligar, reiniciar e dormir meu Mac?

Respostas:

147

O comando que você procura é o desligamento . Isso informa a todos os usuários que a máquina será desligada e diz a todos os aplicativos para fechar arquivos, etc.

O comando usa um parâmetro -h, -r ou -s para desligar, reiniciar ou adormecer o Mac.

O comando deve ser executado como root, assim você precisa usar o sudo.

por exemplo, para reiniciar a máquina imediatamente

sudo shutdown -r now

por exemplo, para desligar a máquina em 60 minutos

sudo shutdown -h +60

Dos comentários, há duas coisas a serem abordadas

Como funciona o desligamento é enviar um sigterm para todos os processos que devem lidar com isso, por exemplo, salvar arquivos abertos etc. Se eles não saírem, eles receberão um SIGKILL que os força a morrer sem chance de responder. Os sinais não são enviados pela fila de mensagens principais, de modo que os aplicativos precisam lidar com isso separadamente para o código que é chamado ao sair do menu. Um bom aplicativo deve chamar código comum de ambos.

Esta outra resposta mostra como desligar como se você atingisse as opções do menu. Mas observe que os aplicativos podem cancelar esse desligamento

user151019
fonte
2
Talvez um pouco relacionado com a pergunta e essa resposta, mas para o que vale a pena este também vem a calhar para mim para bloquear o meu Mac a partir do Terminal, tipo de como bater Winkey + L no Windows: /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend. Tenho-o alias em um arquivo que é originária na minha Bash_profile da seguinte forma:alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
rubynorails
Realmente "diz a todos os aplicativos para fechar arquivos etc."? Eu pensei que apenas matou tudo? A página de manual é do BSD de 1998 - a Apple atualizou o comando para falar bem com o software macOS? Útil se as coisas travaram, mas se o sistema estiver funcionando bem, parece que dizer ao processo da janela de login para executar a ação seria mais "educado".
J-beda
@ j-beda Consulte o documento da Apple developer.apple.com/legacy/library/documentation/Darwin/… - Ele envia primeiro um SIGTERM com o qual os aplicativos devem lidar antes de receber um SIGKILL. Veja a outra resposta para fazê-lo através da janela de login / GUI. Na verdade, como a janela de login faria a ação?
User151019 de
Tenho certeza de que o "desligamento" do Unix não faz tudo o que o processo normal de desligamento da GUI do Mac faz, portanto, na medida em que a Apple não o usa diretamente em seu próprio software, mas no mínimo faz algumas coisas antes de invocar há alguma desvantagem em invocá-lo diretamente. Acredito que o aplicativo "loginwindow" esteja disponível mesmo quando não estiver na janela de login da GUI e possa ser chamado pela ferramenta de linha de comando "osascript". No entanto, não é infalível, portanto, pode ser necessário invocar o "desligamento" de qualquer maneira (ou enviar mortes individuais para processos específicos, suponho).
J-beda #
O mecanismo de sinal não coloca uma mensagem na fila de mensagens do Google Apps como um fechamento normal, mas os aplicativos ainda devem lidar com isso. ou seja, se não funcionar corretamente, a culpa é do Apps. para alguma tentativa na GUI, veja a outra resposta. Mas eu acha que muitas vezes há um aplicativo que se recusa a morrer e cancela o processo de parar de modo de desligamento é a única maneira guranetted
user151019
94

Encerre sem mostrar uma caixa de diálogo de confirmação:

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

Encerre após mostrar uma caixa de diálogo de confirmação:

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

Reinicie sem mostrar uma caixa de diálogo de confirmação:

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

Reinicie após mostrar uma caixa de diálogo de confirmação:

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

Efetue logout sem mostrar uma caixa de diálogo de confirmação:

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

Efetue logout após exibir uma caixa de diálogo de confirmação:

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

Vá dormir ( pmset):

pmset sleepnow

Vá dormir (AppleScript):

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

Coloque as telas em suspensão (10.9 e posterior):

pmset displaysleepnow

Os códigos de quatro letras para os eventos da Apple estão listados em AERegistry.h.

Todos os comandos de eventos do sistema acima enviam eventos da Apple para o loginwindowprocesso. loginwindowrecebe os mesmos eventos da Apple como acima, quando você efetua logout, reinicia, encerra ou coloca o Mac em modo de suspensão normalmente. Consulte Perguntas e respostas técnicas QA1134: Programaticamente causando reinicialização, desligamento e / ou logout .

De acordo com man shutdown, shutdown -h nowe shutdown -r nowsend processa um TERMsinal seguido por um KILLsinal.

De acordo com o Guia de Programação de Serviços e Serviços da Daemons , quando você solicita o loginwindowlogout, os processos que oferecem suporte à terminação súbita são enviados KILLe os processos que não oferecem suporte à terminação súbita são finalizados de maneiras diferentes: Os aplicativos de cacau recebem o applicationShouldTerminate:método delegado, os aplicativos de primeiro plano receba o kAEQuitApplicationevento Apple, os aplicativos em segundo plano recebem o kAEQuitApplicationevento Apple seguido por um KILLsinal e os daemons recebem um TERMsinal seguido por um KILLsinal após alguns segundos.

Lri
fonte
-4

Desligamento imediatamente:

**sudo shutdown -h now**

Se você deseja atrasar o desligamento, use a seguinte sintaxe de comando:

**sudo shutdown -h +30**

(-h parâmetro define o tempo para desligar, onde (+) 30 minutos para parar o sistema)

CamelTM
fonte
2
As informações apresentadas em sua resposta já estão incluídas na resposta aceita e, como tal, não é necessário repetir o que já foi mencionado e aceito.
user3439894 8/06
-11

também útil, para sair do prompt da linha de comando do terminal, digite 'exit':

[host:~user]$ exit
holbein
fonte
10
De que maneira isso desliga, reinicia ou dorme o Mac?
bmike
De qualquer forma, prefiro Ctrl-Dsair, pois não desarruma o histórico da linha de comando.
mwfearnley