¿Usando el comando de terminal para apagar, reiniciar y dormir mi Mac?

Respuestas:

147

El comando que busca es apagar . Esto informa a todos los usuarios que la máquina se va a apagar y les dice a todas las aplicaciones que cierren archivos, etc.

El comando toma un parámetro -h, -r o -s para apagar, reiniciar o suspender la Mac.

El comando debe ejecutarse como root, por lo que debe usar sudo.

por ejemplo, reiniciar la máquina inmediatamente

sudo shutdown -r now

por ejemplo, apagar la máquina en 60 minutos

sudo shutdown -h +60

De los comentarios hay dos cosas que deben abordarse

El funcionamiento del apagado es mediante el envío de un sigterm a todos los procesos que luego deben ocuparse de eso, por ejemplo, guardar archivos abiertos, etc. Si no salen, se les enviará un SIGKILL que los obliga a morir sin posibilidad de responder. Las señales no se envían a través de la cola de mensajes de clave normal, por lo que las aplicaciones tienen que lidiar con esto por separado al código que se llama desde salir en el menú. Una buena aplicación debería llamar a un código común de ambos.

Esta otra respuesta muestra cómo cerrar como si presionas las opciones del menú. Pero tenga en cuenta que las aplicaciones pueden cancelar este cierre

usuario151019
fuente
2
Tal vez un poco sin relación con la pregunta y la respuesta, pero para lo que vale esto también es muy útil para mí para bloquear mi Mac de la terminal, algo así como golpear Winkey + L en Windows: /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend. Lo tengo alias en un archivo que se encuentra en mi .bash_profile de la siguiente manera:alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
rubynorails
¿Realmente "le dice a todas las aplicaciones que cierren archivos, etc."? ¿Pensé que acababa de matar todo? La página del manual es de 1998 BSD: ¿Apple ha actualizado el comando para hablar bien con el software macOS? Es útil si las cosas se han bloqueado, pero si el sistema funciona bien, parece que decirle al proceso de la ventana de inicio de sesión que haga la escritura sería más "cortés".
j-beda
@ j-beda Consulte el documento de Apple developer.apple.com/legacy/library/documentation/Darwin/… - Primero envía un SIGTERM con el que deben lidiar las aplicaciones antes de recibir un SIGKILL. Vea la otra respuesta para hacerlo a través de la ventana de inicio de sesión / GUI En realidad, ¿cómo haría la ventana de inicio de sesión?
user151019
Estoy bastante seguro de que el "apagado" de Unix no hace todo lo que hace el proceso normal de apagado de la GUI de Mac, por lo tanto, en la medida en que Apple no lo usa en su propio software directamente, pero como mínimo hace algunas cosas antes de invocar es, hay algunas desventajas de invocarlo directamente. Creo que la aplicación "loginwindow" está disponible incluso cuando no está en la ventana de inicio de sesión de la GUI, y se puede invocar a través de la herramienta de línea de comandos "osascript". Sin embargo, no es infalible, por lo que es posible que sea necesario invocar el "apagado" de todos modos (o enviar asesinatos individuales a procesos específicos, supongo).
j-beda
El mecanismo de señal no coloca un mensaje en la cola de mensajes de aplicaciones como lo hace un cierre normal, pero las aplicaciones aún deberían tratarlo. es decir, si no funciona correctamente, es culpa de la aplicación. para algún intento de GUI vea la otra respuesta. Pero descubro que a menudo hay una aplicación que se niega a morir y cancela el proceso de cierre, por lo que el apagado es la única forma
garantizada
95

Apague sin mostrar un diálogo de confirmación:

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

Apague después de mostrar un diálogo de confirmación:

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

Reinicie sin mostrar un diálogo de confirmación:

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

Reinicie después de mostrar un cuadro de diálogo de confirmación:

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

Cerrar sesión sin mostrar un diálogo de confirmación:

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

Cerrar sesión después de mostrar un cuadro de diálogo de confirmación:

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

Ve a dormir ( pmset):

pmset sleepnow

Ve a dormir (AppleScript):

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

Poner pantallas para dormir (10.9 y posterior):

pmset displaysleepnow

Los códigos de cuatro letras para los eventos de Apple se enumeran en AERegistry.h.

Todos los comandos de eventos del sistema anteriores envían eventos de Apple al loginwindowproceso. loginwindowse envían los mismos eventos de Apple que los anteriores cuando cierra la sesión, reinicia, apaga o pone la Mac en reposo normalmente. Consulte Preguntas y respuestas técnicas QA1134: Programar reinicio, apagado y / o cierre de sesión mediante programación .

Según man shutdown, shutdown -h nowy shutdown -r nowenvía procesa una TERMseñal seguida de una KILLseñal.

De acuerdo con la Guía de programación de servicios y demonios , cuando le indica que cierre loginwindowsesión, los procesos que admiten la finalización repentina reciben una KILLseñal, y los procesos que no admiten la finalización repentina se finalizan de diferentes maneras: las aplicaciones Cocoa reciben el applicationShouldTerminate:método delegado, las aplicaciones en primer plano recibir el kAEQuitApplicationevento de Apple, las aplicaciones en segundo plano reciben el kAEQuitApplicationevento de Apple seguido de una KILLseñal, y los demonios reciben una TERMseñal seguida de una KILLseñal después de unos segundos.

Lri
fuente
-4

Apagado inmediato:

**sudo shutdown -h now**

Si desea retrasar el apagado, puede usar la siguiente sintaxis de comando:

**sudo shutdown -h +30**

(-h parámetro establecido tiempo para apagar, donde (+) 30 minutos para detener el sistema)

CamelTM
fuente
2
La información presentada en su respuesta ya está incluida en la respuesta aceptada y, como tal, no es necesario repetir lo que ya se mencionó y aceptó.
user3439894
-11

También es útil, para cerrar sesión desde la línea de comandos del terminal, escriba 'exit':

[host:~user]$ exit
holbein
fuente
10
¿De qué manera esto apaga, reinicia o apaga la Mac?
bmike
De cualquier manera, prefiero Ctrl-Dcerrar sesión, ya que no ensucia el historial de la línea de comandos.
mwfearnley