Cada vez estoy más interesado en usar Terminal como una forma alternativa de abordar soluciones en mi Mac. He visto esta pregunta titulada "¿Hay una mejor manera de apagar/reiniciar OSX?" .
Por eso quisiera saber:
¿Cómo apagar, reiniciar y dormir mi Mac usando el comando Terminal exclusivamente?
El comando que buscas es shutdown . Esto informa a todos los usuarios que la máquina se 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, para reiniciar la máquina inmediatamente
sudo shutdown -r now
por ejemplo, para apagar la máquina en 60 minutos
sudo shutdown -h +60
De los comentarios hay dos cosas que deben abordarse.
La forma en que funciona el apagado es enviando un sigterm a todos los procesos que luego deberían lidiar con 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 clave normal, por lo que las aplicaciones tienen que lidiar con esto por separado del código que se llama desde salir en el menú. Una buena aplicación debería llamar al código común de ambos.
Esta otra respuesta muestra cómo apagar como si presionaras las opciones del menú. Pero tenga en cuenta que las aplicaciones pueden cancelar este cierre
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
. Lo tengo con alias en un archivo que se origina en mi .bash_profile de la siguiente manera:alias lock='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
Apagar sin mostrar un cuadro de diálogo de confirmación:
osascript -e 'tell app "System Events" to shut down'
Apagar después de mostrar un cuadro de diálogo de confirmación:
osascript -e 'tell app "loginwindow" to «event aevtrsdn»'
Reinicie sin mostrar un cuadro de 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 cuadro de 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'
Ir a dormir ( pmset
):
pmset sleepnow
Ir a dormir (AppleScript):
osascript -e 'tell app "System Events" to sleep'
Ponga las pantallas en modo de suspensión (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 loginwindow
proceso. loginwindow
se envían los mismos eventos de Apple que los anteriores cuando cierras la sesión, reinicias, apagas o pones la Mac en suspensión normalmente. Consulte las preguntas y respuestas técnicas QA1134: Provocar el reinicio, el apagado o el cierre de sesión mediante programación .
Según man shutdown
, shutdown -h now
y shutdown -r now
envía procesa una TERM
señal seguida de una KILL
señal.
De acuerdo con la Guía de programación de demonios y servicios , cuando le indica loginwindow
que cierre la sesión, los procesos que admiten la terminación repentina reciben una KILL
señal y los procesos que no admiten la terminación repentina se terminan de diferentes maneras: las aplicaciones Cocoa reciben el applicationShouldTerminate:
método de delegado, las aplicaciones en primer plano reciben el kAEQuitApplication
evento de Apple, las aplicaciones en segundo plano reciben el kAEQuitApplication
evento de Apple seguido de una KILL
señal y los demonios reciben una TERM
señal seguida de una KILL
señal después de unos segundos.
sleep 60 && osascript -e 'tell app "System Events" to shut down'
podría funcionar, pero ¿cómo hacerlo solo con AppleScript?Apagar inmediatamente:
sudo shutdown -h now
Si tiene ganas de retrasar el apagado, puede usar la siguiente sintaxis de comando en su lugar:
sudo shutdown -h +30
(-h parámetro establece el tiempo para apagar, donde (+) 30 minutos para detener el sistema)
también útil, para cerrar la sesión desde el indicador de línea de comandos de la terminal, escriba 'salir':
[host:~user]$ exit
atilkan