¿Reinicio limpio desde la terminal?

En las últimas semanas, mi computadora portátil OS X 10.8.4 se ha atascado por completo en estados en los que es imposible interactuar directamente. Varias veces, la cuña USB de VMWare Fusion ha roto la entrada del teclado. Una vez, el sistema tenía una aparente condición de carrera entre el bloqueo del sistema y la solicitud de desbloqueo, dejando la GUI completamente bloqueada. Estos son problemas terribles, pero no hay nada que pueda hacer para solucionarlos.

Todo lo que puedo hacer es averiguar cómo puedo obtener un reinicio limpio cuando esto sucede. Puedo ingresar a la computadora y ejecutar cualquier comando, sin problema. Realmente no confío en que el estado del sistema sea recuperable en ninguno de esos estados, así que solo quiero un reinicio limpio.

Pero noshutdown -h now es un reinicio limpio. No hace lo mismo para cerrar limpiamente las aplicaciones GUI que seleccionar "Reiniciar..." o "Apagar..." en el menú de Apple. Da como resultado la pérdida de datos porque las aplicaciones GUI no se cerraron limpiamente. Podría intentar encontrar todo lo que tengo funcionando en ps y enviarlos todos . Parece funcionar, pero es un proceso enormemente manual. Me encantaría decirle a OS X que haga lo que sea que haga cuando elija esos elementos del menú.SIGTERM

Entonces, ¿hay alguna utilidad que haga esto bien? ¿Estoy atascado haciéndolo de forma manual y propensa a errores?

Enviar SIGTERMa todos los procesos es exactamente lo que shutdownhace :-)
Sin embargo, shutdownno detiene limpiamente VMWare Fusion. Enviarlo SIGTERMsí. Algo es diferente.
Para finalizar de manera segura las aplicaciones GUI, necesitará AppleScript para enviar un evento de "salir". Esto podría haber surgido antes, ¿ya hizo una búsqueda en el sitio?
Oh, parece que puedo usar AppleScript para decirle al buscador que se reinicie directamente. Tendré que probar eso, pero probablemente sea correcto.

Respuestas (1)

Sí, ok. Puedo resolver esto con Applescript. Gracias a patrix por hacerme mirar en la dirección correcta.

tell application "Finder"
    restart
end tell

Guardado como restart.scpt, ejecutar con osascript restart.scpt. Probé ejecutándolo de forma remota con la pantalla bloqueada y se reinició perfectamente. Debo recordar que Applescript existe cada vez que quiero automatizar las interacciones del Finder.

También puedes usar osascript -e 'tell app "System Events" to restart'. Cierta terminología general de secuencias de comandos se trasladó a Eventos del sistema en las primeras versiones de OS X, y el restartcomando ahora forma parte del "paquete heredado" en el diccionario de Finder. Sin embargo , si observa la pestaña de eventos en el Editor de AppleScript, ambos restartcomandos solo se envían «event aevtrest»a la ventana de inicio de sesión.
killall Finderhace lo mismo para hacer que el buscador se reinicie y deje las otras aplicaciones y programas en segundo plano solos.
@bmike Eso no es lo mismo en absoluto. Es algo que probé, como dijiste, deja otras aplicaciones ejecutándose. No creo que eso solucione nada en ninguna de las situaciones en las que lo he necesitado. Quiero un reinicio completo del sistema para corregir cualquier estado que se haya dañado.
Hmm, estoy un poco confundido entonces, ¿la solución de búsqueda propuesta donde Applescript le dice a Finder que reinicie el trabajo pero enviar Finder a kill no lo hace? Dado que respondió a su propia pregunta, parece que está listo para aceptar la respuesta como una solución a su problema, ¿quizás?
@bmike La diferencia es decirle al buscador que reinicie reinicia todo el sistema operativo. Matar al buscador solo hace que el proceso del buscador reaparezca.