GNU/Linux >> Tutoriales Linux >  >> Linux

Más de 10 ejemplos para matar un proceso en Linux

En este tutorial, hablaremos sobre cómo eliminar un proceso en Linux con varios ejemplos. En la mayoría de los casos, es tan simple como escribir el comando "matar" seguido del ID del proceso (comúnmente abreviado como PID).

Como puede ver, eliminamos un proceso con el ID de 1813.

Si es un usuario de Windows, puede ser útil pensar en el comando 'matar' como el equivalente de Linux del botón 'Finalizar tarea' dentro del administrador de tareas de Windows.

Lista de procesos en ejecución

El comando "ps -e" enumerará todo lo que se ejecuta en su sistema. Incluso con una instalación mínima, el comando probablemente generará más de 80 resultados, por lo que es mucho más fácil canalizar el comando a "grep" o "más".

ps -e | grep name-of-process

En la captura de pantalla a continuación, verificamos si SSH se está ejecutando en el sistema.

Esto también nos da el PID del demonio SSH, que es 1963.

Vaya a "más" si desea ver los procesos en ejecución de su sistema uno por uno.

También puede utilizar el comando "superior" para ver una lista de los procesos en ejecución. Esto es útil porque le mostrará cuántos recursos del sistema está usando cada proceso.

El PID, el usuario y el nombre del recurso se identifican aquí, lo cual es útil si decide eliminar cualquiera de estos servicios más adelante.

Preste atención a las columnas %CPU y %MEM, porque si observa un proceso sin importancia que consume valiosos recursos del sistema, ¡probablemente sea beneficioso eliminarlo!

Otra forma muy eficiente de obtener la ID del proceso correspondiente es usar el comando 'pgrep'. El único argumento que debe proporcionar es el nombre (o parte del nombre) del proceso en ejecución.

Esto es lo que parece cuando buscamos SSH. Como puede ver, devuelve un ID de proceso de 2506.

Eliminar un proceso por PID

Ahora que conocemos el PID del demonio SSH, podemos matar el proceso con el comando kill.

$ sudo kill 1963

Puede emitir un comando 'ps' final, solo para asegurarse de que el proceso se eliminó.

$ ps -e | grep ssh

Los resultados aparecen vacíos, lo que significa que el proceso se cerró con éxito. Si nota que el proceso continúa ejecutándose, lo que normalmente no debería suceder, puede intentar enviar una señal de finalización diferente al proceso, como se explica en la próxima sesión.

Nota:No siempre es necesario usar 'sudo' o la cuenta de usuario raíz para finalizar un proceso. En el ejemplo anterior, terminamos el demonio SSH, que se ejecuta bajo el usuario raíz. Por lo tanto, debemos tener los permisos adecuados para finalizar el proceso.

Señal predeterminada enviada por el comando de eliminación

De forma predeterminada, el comando de eliminación enviará una señal SIGTERM al proceso que especifique.

Esto debería permitir que el proceso finalice correctamente, ya que SIGTERM le indicará al proceso que realice sus procedimientos de cierre normales; en otras palabras, no obligará al proceso a finalizar abruptamente.

Esto es algo bueno porque queremos que nuestros procesos se cierren de la forma prevista.

A veces, sin embargo, la señal SIGTERM no es suficiente para matar un proceso. Si ejecuta el comando kill y observa que el proceso aún se está ejecutando, es posible que el proceso aún esté en proceso de apagado o que se haya bloqueado por completo.

Asesinato a la fuerza

Para forzar el cierre del proceso y evitar su apagado normal, puede enviar una señal SIGKILL con el interruptor -9, como se muestra aquí:

$ kill -9 processID

Puede ser tentador agregar siempre el interruptor -9 en sus comandos de eliminación, ya que siempre funciona. Sin embargo, esta no es la mejor práctica recomendada. Solo debe usarlo en procesos que están bloqueados y se niegan a cerrarse correctamente.

Cuando sea posible, utilice la señal SIGTERM predeterminada. Esto evitará errores a largo plazo, ya que le da al proceso la oportunidad de cerrar sus archivos de registro, finalizar cualquier conexión persistente, etc.

Aparte de las señales SIGTERM y SIGKILL, hay un montón de otras señales que kill puede enviar a los procesos, todas las cuales se pueden ver con el modificador -l.

Los números al lado de los nombres son lo que especificaría en su comando 'matar'. Por ejemplo, kill -9 es SIGKILL, tal como se ve en la captura de pantalla anterior.

Para las operaciones diarias, SIGTERM y SIGKILL son probablemente las únicas señales que nunca necesitará usar. Solo tenga en cuenta a los demás en caso de que tenga una circunstancia extraña en la que un proceso recomiende terminarlo con una señal diferente.

¿Cómo eliminar todos los procesos por nombre?

También puede usar el nombre de un proceso en ejecución, en lugar del PID, con el comando pkill. Pero cuidado, esto terminará con todas los procesos que se ejecutan con el nombre especificado, ya que kill no sabrá qué proceso específico está intentando finalizar.

$ pkill name-of-process

Mire el ejemplo a continuación, donde finalizamos cinco procesos con un solo comando pkill.

En este ejemplo, queríamos terminar solo una de esas sesiones de pantalla; habría sido necesario especificar el PID y usar el comando normal de 'matar'. De lo contrario, no hay forma de especificar de forma única el proceso que deseamos finalizar.

¿Cómo eliminar todos los procesos de un usuario?

También puede usar el comando pkill para finalizar todos los procesos que ejecuta un usuario de Linux. Primero, para ver qué procesos se están ejecutando bajo un usuario específico, use el comando ps con un modificador -u.

$ ps -u username

Esa captura de pantalla nos muestra que actualmente hay cinco servicios ejecutándose bajo el usuario 'geek'. Si necesita eliminarlos todos rápidamente, puede hacerlo con pkill.

$ pkill -u username

¿Cómo matar un proceso nohup?

Puede eliminar el proceso nohup de la misma manera que cualquier otro proceso en ejecución. Tenga en cuenta que no puede hacer grep para "nohup" en el comando ps, por lo que deberá buscar el proceso en ejecución utilizando los mismos métodos que se muestran arriba.

En este ejemplo, encontramos un script titulado 'test.sh' que se ha ejecutado con el comando nohup. Como verá, encontrarlo y finalizarlo es muy similar a los ejemplos anteriores.

La única diferencia con la salida es que el shell nos notifica que el proceso finalizó. Eso no es parte de matar, sino más bien el resultado de ejecutar la secuencia de comandos en segundo plano (el ampersand en este ejemplo) y estar conectado al mismo tty desde el que se inició la secuencia de comandos.

$ nohup ./test.sh &

¿Cómo ejecutar un proceso en segundo plano?

El comando kill es una forma eficiente de finalizar los procesos que se están ejecutando en segundo plano. Ya aprendió cómo eliminar procesos en este tutorial, pero saber cómo ejecutar un proceso en segundo plano es una combinación efectiva para usar con el comando de eliminación.

Puede agregar un ampersand (&) a su comando para que se ejecute en segundo plano. Esto es útil para comandos o secuencias de comandos que tardarán un tiempo en ejecutarse y desea realizar otras tareas mientras tanto.

Aquí hemos puesto un simple comando 'ls' en segundo plano. Dado que es el tipo de comando que tarda muy poco tiempo en ejecutarse, recibimos más información sobre cómo terminará su trabajo inmediatamente después.

El resultado en nuestra captura de pantalla dice "Terminado", lo que significa que el trabajo en segundo plano se completó con éxito. Si, en su lugar, eliminara el trabajo, se mostraría "terminado" en la salida.

También puede mover un trabajo al fondo presionando Ctrl+Z en su teclado. La ^Z en esta captura de pantalla indica que presionamos Ctrl+Z y el script test.sh se movió al fondo.

Puede ver que test.sh continúa ejecutándose en segundo plano emitiendo un comando ps.

$ ps -e | grep test.sh

Usando el comando de pantalla

Otra forma de ejecutar un proceso en segundo plano es usar el comando 'pantalla'. Esto funciona creando lo que básicamente equivale a una ventana de terminal separada (o pantalla y de ahí el nombre).

Cada pantalla que crea tiene su ID de proceso, lo que significa que es una forma eficiente de crear procesos en segundo plano que luego se pueden terminar con el comando kill.

El comando de pantalla no viene con todas las instalaciones de Linux de forma predeterminada, por lo que es posible que deba instalarlo.

En las distribuciones basadas en Ubuntu y Debian, puede instalarlo con el siguiente comando:

$ sudo apt-get install screen

Una vez que instaló el comando de pantalla, puede crear una nueva sesión simplemente escribiendo 'pantalla'.:

$ screen

Pero, antes de hacer eso, es bueno acostumbrarse a especificar nombres para sus pantallas. De esa manera, son fáciles de buscar e identificar más tarde. Todo lo que necesita para especificar un nombre es el modificador -S.

$ screen -S my-screen-name

Hagamos una pantalla llamada "prueba" y luego intentemos terminarla con el comando "matar". Empezamos así:

Después de escribir este comando y presionar enter, somos llevados instantáneamente a nuestra pantalla recién creada. Aquí es donde puede iniciar el proceso que desea que se ejecute en segundo plano.

Esto es especialmente útil si está conectado a SSH en un servidor y necesita un proceso para continuar ejecutándose incluso después de desconectarse.

Con su comando/secuencia de comandos ejecutándose, puede desconectarse de la pantalla presionando Ctrl+A, seguido de D (suelte las teclas Ctrl y A antes de presionar la tecla D).

Como puede ver, el comando de pantalla ha enumerado la ID del proceso tan pronto como separamos la pantalla. Por supuesto, podemos terminar esta pantalla (y el comando/secuencia de comandos que se ejecuta dentro de ella), usando el comando matar.

Puede buscar fácilmente el ID de proceso de sus sesiones de pantalla usando este comando:

$ screen -ls

Si no hubiéramos nombrado nuestra sesión de pantalla usando el interruptor -S, solo se enumeraría la ID del proceso en sí. Para volver a adjuntar a cualquiera de las pantallas enumeradas, puede usar el modificador -r:

$ screen -r name-of-screen

o

$ screen -r PID

En la captura de pantalla a continuación, estamos eliminando la sesión de pantalla que creamos (junto con lo que se esté ejecutando dentro de ella) y luego emitiendo otro comando screen -ls para verificar que el proceso realmente haya finalizado.

¿Cómo eliminar un proceso en segundo plano?

En uno de nuestros ejemplos en la sección anterior, pusimos nuestro script tesh.sh para que se ejecute en segundo plano. La mayoría de los procesos en segundo plano, especialmente los comandos simples, finalizarán sin problemas.

Sin embargo, al igual que cualquier proceso, uno en segundo plano puede negarse a cerrarse fácilmente. Nuestro script test.sh tiene un PID de 2382, por lo que emitiremos el siguiente comando:

$ kill 2383

Sin embargo, en la captura de pantalla, notará que el script ha ignorado nuestro comando de eliminación:

Como ya aprendimos, kill -9 es la mejor manera de terminar un proceso que se cuelga o se niega a terminar.

¿Cómo eliminar los procesos detenidos?

Puede ser útil eliminar todos los trabajos en segundo plano detenidos a la vez si se han acumulado y ya no le son útiles. A modo de ejemplo, estamos ejecutando tres instancias de nuestro script test.sh en segundo plano y se han detenido:

$ ./test.sh &

Puede ver estos procesos con el comando ps:

$ ps -e | grep test.sh

O bien, para obtener una lista de todos los trabajos detenidos en el sistema, puede ejecutar el comando de trabajos:

$ jobs

La forma más fácil de eliminar todos los trabajos detenidos es con el siguiente comando:

$ kill `jobs -ps`

O use el modificador -9 para asegurarse de que los trabajos terminen inmediatamente:

$ kill -9 `jobs -ps`

El comando `jobs -ps` mostrará una lista de los PID de todos los trabajos que se ejecutan en segundo plano, por lo que podemos combinar su salida con el comando kill para finalizar todos los procesos detenidos.

Operación de eliminación no permitida

Si recibe un error de "operación no permitida" cuando intenta eliminar un proceso, es porque no tiene los permisos adecuados. Inicie sesión en la cuenta raíz o use 'sudo' (en distribuciones Debian) antes de su comando de eliminación.

$ sudo kill PID

Espero que encuentres útil el tutorial. Sigue regresando.


Linux
  1. Cómo matar un proceso zombie en Linux

  2. 8 comandos de Linux para una gestión de procesos eficaz

  3. Ejemplos de comandos kill en Linux

  4. Ejemplos de comandos renice en Linux

  5. Ejemplos de comandos pkill en Linux

Tutorial de comandos Linux nl para principiantes (7 ejemplos)

Tutorial de comandos de Linux nm para principiantes (10 ejemplos)

Tutorial de comando superior de Linux para principiantes (8 ejemplos)

Los 30 mejores ejemplos de comandos para monitorear en Linux

Cómo MATAR un proceso en Linux

UNIX/Linux:7 ejemplos prácticos de comandos PS para el monitoreo de procesos