Cuando un proceso se comporta mal, es posible que a veces quieras terminarlo o matarlo. En este post, exploraremos algunas formas de terminar un proceso o una aplicación desde la línea de comandos, así como desde una interfaz gráfica, utilizando gedit como una aplicación de ejemplo.
Usando la línea de comandos/caracteres de terminación
Ctrl + C
Un problema al invocar gedit
desde la línea de comandos (si no está usando gedit &
) es que no liberará el prompt, por lo que la sesión del shell se bloquea. En tales casos, Ctrl+C (la tecla Control en combinación con ‘C’) es muy útil. Eso terminará gedit
y todo el trabajo se perderá (a menos que el archivo se haya guardado). Ctrl+C envía la señal SIGINT
a gedit
. Esta es una señal de parada cuya acción por defecto es terminar el proceso. Indica al shell que detenga gedit
y regrese al bucle principal, y se recuperará el prompt.
$ gedit
^C
Ctrl + Z
Esto se llama carácter de suspensión. Envía una señal SIGTSTP
para procesar. También es una señal de parada, pero la acción por defecto no es matar sino suspender el proceso.
Detendrá (matar/terminar) gedit
y devolverá el prompt del shell.
$ gedit
^Z
+ Stopped gedit
$
Una vez suspendido el proceso (en este caso, gedit
), no es posible escribir ni hacer nada en gedit
. En el fondo, el proceso se convierte en un trabajo. Esto puede ser verificado por el comando jobs
.
$ jobs
+ Stopped gedit
jobs
le permite controlar múltiples procesos dentro de una sola sesión de shell. Puede detener, reanudar y mover trabajos al fondo o al primer plano según sea necesario.
Reanudemos gedit
en el fondo y liberemos un prompt para ejecutar otros comandos. Puede hacer esto usando el comando bg
, seguido por el ID del trabajo (fíjese en de la salida de
jobs
arriba. es el ID del trabajo).
$ bg 1
+ gedit &
Esto es similar a iniciar gedit
con &,
:
$ gedit &
Usando kill
kill
permite un control fino sobre las señales, permitiéndole señalar un proceso especificando un nombre de señal o un número de señal, seguido de un ID de proceso, o PID.
Lo que me gusta de kill
es que también puede trabajar con IDs de trabajos. Vamos a iniciar gedit
en el fondo usando gedit &
. Suponiendo que tengo un ID de trabajo de gedit
desde el comando jobs
, enviemos SIGINT
a gedit
:
$ kill -s SIGINT %1
Note que el ID de trabajo debe ser prefijado con %
, o kill
lo considerará un PID.
kill
puede trabajar sin especificar una señal explícitamente. En ese caso, la acción por defecto es enviar SIGTERM
, que terminará el proceso. Ejecute kill -l
para listar todos los nombres de señales, y utilice el comando man kill
para leer la página man.
Usando killall
Si no quiere especificar un ID de trabajo o PID, killall
le permite especificar un proceso por su nombre. La forma más sencilla de terminar gedit
usando killall
es:
$ killall gedit
Esto matará todos los procesos con el nombre gedit
. Al igual que kill
, la señal por defecto es SIGTERM
. Tiene la opción de ignorar el caso usando -I
:
$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit
Para aprender más sobre varias banderas proporcionadas por killall
(como -u
, que le permite matar los procesos propiedad del usuario) consulte la página man (man killall
)
Usando xkill
¿Alguna vez se ha encontrado con un problema en el que un reproductor multimedia, como VLC, se puso en gris o se colgó? Ahora puede encontrar el PID y matar la aplicación utilizando uno de los comandos mencionados anteriormente o utilizar xkill
.
xkill
le permite matar una ventana utilizando el ratón. Simplemente ejecute xkill
en un terminal, que debería cambiar el cursor del ratón a una x o a un pequeño icono de una calavera. Haga clic en la x de la ventana que desea cerrar. Sin embargo, tenga cuidado al usar xkill
, ya que su página de manual explica que puede ser peligroso. Consulte la página del manual de cada comando para obtener más información. También puede explorar comandos como pkill
y pgrep
.