¿Cómo eliminar aplicaciones de interfaz gráfica de usuario mediante terminal?

22

¿Hay alguna manera de cerrar una aplicación GUI de manera amigable " por favor, abandónese ahora ", sin acceso gráfico a la ventana de aplicaciones?

Por ejemplo, si la pantalla de Gnome / X se bloquea en negro, me gustaría cambiar a tty2 y cerrar aplicaciones como firefox de una manera que les permita guardar su configuración, etc. En el mejor de los casos sin más consultas de los usuarios.

jfk
fuente

Respuestas:

19

Por lo general, puede usar SIGHUP para cerrar "amigablemente" una aplicación (con o sin interfaz gráfica).

kill -HUP <application_pid>

EDITADO : se agregó otra información

La forma en que se maneja SIGHUP depende de la aplicación, por lo que, como señaló Dave , puede suceder que esta señal esté enmascarada o manejada. Sin embargo, todas las aplicaciones interactivas salen con gracia con un SIGHUP.

Por otro lado, tengo que admitir que generalmente sigo este esquema:

kill -HUP <application_pid>
# check if application is still running
kill -INT <application_pid>
# check if application is still running
kill -KILL <application_pid>

Obviamente el último comando no es tan "amigable".

andcoz
fuente
3
Si no conoce el PID de la aplicación, puede usarlo pkillpara especificar el nombre del ejecutable. Por ejemplo:pkill -HUP firefox-bin
Caleb
@Dave también: Interesante, encontré esto relacionado, lo que sugiere un orden similar pero revertido: TERM-> INT-> HUP (importa la vejez). Tal vez tenga en cuenta HUP-> INT-> TERM, ya que KILL no parece ser amigable conmigo. Gracias a todos.
jfk
@Caleb, solo ten cuidado allí donde hay múltiples procesos con el mismo nombre: pkilllos matará a todos. Por ejemplo, ejecutar este unas cuantas veces para hacer algunos procesos en segundo plano: sed "s/Woo/woo/" < /dev/urandom >> /dev/null &. Entonces hazlo pkill -HUP sed. Eliminará todas las instancias de sed que comenzó más cualquier otra instancia que realice un trabajo útil.
ahcox
@Caleb, además, pkilltambién matará algunas aplicaciones que no esperas: por ejemplo, si has chromiumejecutado y quieres matar a un programa llamado rom, pkillfelizmente chromiumderribarás. Mejor uso killall, que solo coincidirá con el nombre exacto (sin embargo, no en Solaris, donde literalmente mata todos los procesos ).
Ruslan
@Ruslan O use pkill -xpara obtener una coincidencia exacta en lugar de una coincidencia parcial. Personalmente, aprovecho la coincidencia parcial para guardar la escritura, pero debes saber qué hace la herramienta. Sí, por defecto coincide con cadenas parciales. Otra opción útil es -fhacer coincidir la línea de comando completa en lugar de solo $0.
Caleb
5

Es posible que desee probar:

kill -TERM <pid>

o

kill -TERM `pidof <application_name>`

Al menos en algunos sistemas, cuando el sistema se está apagando, todos los procesos reciben la señal TERM (15) antes de enviar la señal KILL (9). HUP a menudo solo hace que la aplicación vuelva a cargar sus configuraciones, pero puede ser diferente proceso por proceso.

Dave
fuente
2

No hay una forma general de decirle a una aplicación que salga y guarde su configuración. Puede haber formas de notificar a las aplicaciones utilizando un marco particular, por ejemplo, dcop kfoo MainApplication-Interface quitpara algunas aplicaciones KDE 3. Tenga en cuenta que la aplicación puede mostrar un cuadro de diálogo pidiéndole confirmación.

Si la pantalla X queda inutilizable, elimine el servidor X. Presione Ctrl+ Alt+ BackSpace; si eso no funciona, elimine el proceso del servidor X con sudo pkill -x Xorg. Cuando el servidor X muere, todas las aplicaciones X son notificadas e intentarán salir con gracia (no hay garantía de que guardarán todo, pero es su mejor opción).

Gilles 'SO- deja de ser malvado'
fuente
No sabía si las aplicaciones serán notificadas o simplemente asesinadas; y como el combo de teclas no está habilitado por defecto en Fedora ... ¡Ahora sé cómo matarlo por línea de comando!
jfk
1

Similar a la respuesta de @ andcoz, si no conoce el PID de la aplicación (supongo que no lo sabe de memoria), intente esto:

kill -HUP `pidof [application_name]`
n0pe
fuente
2
Da un paso más y prueba pkill -HUP [application_name]:)
Caleb
Acabo de aprender pkill y pgrep: D
jfk
1

Otros dos comandos que quizás desee considerar son wmctrl -cy xdotool windowkill. No estoy seguro de si windowkilles exactamente lo que está buscando, si no, podría estar interesado en el windowdeleteparche.

Jamie Kitson
fuente