Forma de cerrar la sesión de un usuario desde la línea de comandos en OS X 10.9

Quiero cerrar la sesión de mi Mac OS X desde la línea de comandos. Mi versión de OS X es 10.9. Intenté command pkill -KILL -u uid, pero este comando no funcionó. ¿Hay algún comando que se pueda usar para cerrar la sesión de un usuario del sistema usando solo la línea de comando, no AppleScript ?

¿Qué es exactamente lo que no funcionó?
al ejecutar el comando pkill -KILL -u uid, el sistema me muestra una pantalla gris y al esperar mucho tiempo, el sistema muestra la ventana de cierre forzado sin que se esté ejecutando ninguna aplicación

Respuestas (9)

sudo launchctl bootout gui/$(id -u <username>)
o
sudo launchctl bootout user/$(id -u <username>)

Reemplace el nombre de usuario con el nombre de usuario del usuario de destino o reemplace la subcapa completa con el uid del usuario. Esto le dice a launchctl que elimine la sesión de inicio de sesión de los usuarios (gui se refiere específicamente a la sesión de inicio de sesión temporal del usuario, el usuario especifica los procesos en segundo plano de los usuarios).

Puede cerrar la sesión sin el sudopara probar esto.

Tenga en cuenta que esto SÓLO funcionará en macOS 10.11.x o posterior (consulte launchctl helppara obtener más información)

SOLO volví a leer su pregunta y lamento que esto no lo ayude, pero aparecerá en los resultados de búsqueda de Google.
¿Conoces el comando opuesto a bootout? Necesito usuario de inicio de sesión programáticamente.
Esto es genial. Mi Mac se atasca después de un tiempo cuando le digo que se desconecte y nunca se desconecta. El segundo comando fue muy persuasivo.

Para cerrar la sesión únicamente desde la terminal (o desde una sesión ssh remota), simplemente elimine el proceso de la ventana de inicio de sesión:

sudo pkill loginwindow

Podría volverse elegante y especificar el usuario si varios usuarios tienen un proceso de ventana de inicio de sesión, pero esta es una forma sencilla de una sola vez, no es una forma rápida de finalizar la sesión gráfica de un usuario.

Esto me ha funcionado en el pasado:

Cerrar sesión (con confirmación)

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

Cerrar sesión directamente (sin confirmación)

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

o

osascript -e 'tell application "loginwindow" to  «event aevtrlgo»'

De esta manera, cualquier aplicación en ejecución se notará y podrá finalizar de manera segura.

osascript -e 'dile a la aplicación "Eventos del sistema" a «event aevtrlgo»' mostrando un error: un "<" no puede ir después de esto a .
Hmm, funciona bien para mí. ¿Puedes probar desde un script de shell en lugar de la línea de comando? Tal vez el shell haga algunas cosas extrañas aquí.
Supongo que el OP tiene algún otro problema y los comandos normales se cuelgan de los comentarios aquí y la descripción de la pregunta.
Tenga en cuenta que « ≠ <<

Una buena utilidad para agregar a su Terminal es el comando "cerrar sesión", que se usa como:

logout UserName

Aquí el cómo:

  1. Edite su .bash_profile

    nano ~/.bash_profile

  2. Añade esta línea:

    logout() {sudo launchctl bootout user/$(id -u "$1")}

  3. Guarde el archivo presionandoctrl+x

  4. reinicia la terminal

Estás listo para ir ;)

Tuve que dividir el cuerpo en una nueva línea y luego también colocar la llave de cierre.
@bmauter no es para mí, en la forma sugerida funciona perfectamente.
Creado .bash_profile y agregado: logout() {sudo launchctl bootout user/$(id -u "$1")}Recibo el siguiente error cuando intento ejecutar. -bash: logout: FIRSTNAME: numeric argument requiredEstoy confundido. El comando funciona bien cuando se usa directamente en la terminal, pero por alguna razón, esto como un perfil de bash o un script de bash sigue arrojando este error. Me pregunto si tiene que ver con el hecho de que el nombre de usuario con el que estoy tratando de probar tiene un espacio entre Nombre y Apellido. Parece que el Apellido se interpreta como un argumento, pero la entrada en .bash_profile tiene comillas dobles.

Si tienes varios usuarios...

Encuentre el ID del proceso con:

ps aux|grep login

Luego elimine ese proceso y cerrará la sesión. Pero quedan muchos procesos.

Consulte con pstreepara saber qué proceso terminar.

Esto hace el truco para mí.

sudo -s

Para obtener algunos privilegios de root y el indicador #, elimine los procesos.

killall -vu username -HUP

Y si no todo se ha ido. ¡Nuke em! Advertencia obligatoria: matar cosas como root no tiene deshacer y no "¿está seguro de que desea interrumpir este proceso sin guardar sus archivos, incluidas las bases de datos críticas del sistema que pueden hacer que la máquina no se pueda iniciar en raras ocasiones?" escriba advertencias.

killall -vu username -9
No es necesario entrar en el shell raíz, simplemente coloque sudo delante de los comandos killall

Una forma extrema de expulsar la sesión del usuario es forzar un reinicio:

sudo shutdown -r now

Esto funciona bien si está intentando actualizar el sistema.

Y también puedes matar las arañas en tu casa quemándola. Cerrar tendrá el efecto inherente de expulsar a los usuarios, pero si su objetivo es simplemente desconectar a alguien, forzar un reinicio es extremo.
Muchas veces usé este, porque mi Mojave estaba repleto de procesos de todos los usuarios de la familia que habían CERRADO LA SESIÓN (normalmente, usando la interfaz de usuario, confirmando todo y volviendo a la ventana de inicio de sesión). Realmente no puedo entender por qué MacOS se comporta de esta manera, y qué se gana (a excepción de las vulnerabilidades) al mantener vivos los procesos de los usuarios desconectados. De todos modos, las respuestas anteriores me permiten curar eso sin la necesidad de reiniciar (es decir, cerrar sesión yo también ...)

Esto hace el truco para mí

sudo-su usuario

y para la raíz

sudo-su raíz

si ha iniciado sesión con ssh en una computadora remota, puede cerrar la sesión simplemente escribiendo 'salir':

[host:~user]$ exit