GNU/Linux >> Tutoriales Linux >  >> Linux

Master Linux Kill Process usando ps, pgrep, pkill y más

Administrar procesos en Linux puede parecer abrumador para un nuevo administrador del sistema (sysadmin) al principio. Pero con una pequeña explicación y demostración, aprenderá cómo encontrar y ejecutar procesos de finalización de Linux con solo usar herramientas de línea de comandos como ps y kill .

En este artículo, aprenderá comandos para localizar procesos en ejecución y erróneos, matar (terminar) procesos en ejecución, encontrar procesos en segundo plano y mucho más en cualquier sistema operativo Linux.

Al final del artículo, administrará procesos en función de los números de identificación de procesos (PID) desde la línea de comandos como un profesional de Linux. ¡Sigue leyendo para aprender todo sobre los comandos de gestión de procesos en Linux!

Requisitos

Este artículo será un recorrido sobre cómo administrar procesos en Linux. Si desea ser práctico, necesitará lo siguiente:

  • Un host Linux, que puede ser una máquina virtual o una máquina física.
  • Para probar los ejemplos de PowerShell, instale PowerShell 7.1.1 en un servidor Linux.
  • Una cuenta de usuario no raíz. Si bien no se requiere acceso a la raíz, habrá un ejemplo en el que el usuario raíz puede eliminar el proceso en ejecución de otro usuario.

La distribución de Linux que elija usar depende de usted. Este artículo estará basado en Ubuntu 20.04 LTS. Sin embargo, los comandos son estándar para el sistema operativo Linux.

¿Preparado para comenzar? Bien, vamos a sumergirnos.

Gestión de Procesos en Linux

En ocasiones, puede encontrarse con un escenario en el que necesita detener un proceso en ejecución en un sistema Linux. Como ejemplo, puede tener un script de bash que se ejecuta según un cronograma. Ese script bash está configurado para ejecutarse como otro usuario a través de un cron trabajo (programador de procesos de Linux).

A veces, este script genera procesos erróneos que pueden hacer que el script falle. ¿Cómo elimina esos procesos errantes sin reiniciar el sistema o detener el script?

En las siguientes secciones, recorrerá los comandos utilizados para localizar y terminar o matar procesos en un sistema Linux. Cada sección se basará en la anterior. Aprenderás sobre ps , top , pgrep , kill y pkill todos los comandos nativos de Linux.

Como beneficio adicional, los comandos equivalentes de PowerShell Get-Process y Stop-Process se incluyen si los comandos nativos de Linux no son su estilo.

Herramientas para Localizar Procesos

Antes de eliminar un proceso, debe ubicar el proceso correcto al que apuntar. El PID único permite una orientación precisa. Siga leyendo para saber cómo ubicar los procesos correctos para la terminación.

Uso del ps Comando para mostrar información del proceso

El estado del proceso o ps El comando muestra información relacionada con los procesos activos en un sistema Linux. Puede localizar un proceso en ejecución e incluso procesos en segundo plano con ps .

El comando ps mostrará, por defecto, todos los procesos para la identificación efectiva del usuario (EUID) del usuario actual. Ejecutando el ps El comando, como se muestra a continuación, devolverá todos los procesos en ejecución que su usuario pueda finalizar.

ps

Búsqueda de información de proceso ampliada utilizando top Comando

¿Qué sucede si desea encontrar información constantemente actualizada sobre los procesos en ejecución y las métricas del sistema? En ese caso, puede usar el top dominio. A diferencia de ps , el top El comando actualiza la información del proceso en la pantalla durante un intervalo establecido.

Cuando ejecutas el top comando, verá algo más que un PID. Incluidos con los detalles del proceso están los porcentajes de CPU y memoria, Valores agradables (prioridad del proceso de programación de la CPU) y la prioridad del proceso (PR) establecida por el kernel de Linux.

Para un administrador de sistemas nuevo o experimentado, el top El comando suele ser la herramienta principal para administrar procesos y recursos vitales del sistema. Como se muestra a continuación, el top la salida del comando muestra más información del proceso que el ps comando, incluidas las métricas generales del sistema.

htop es una variante mejorada de top que incluye varias mejoras, como una salida de terminal coloreada.

Supongamos que desea inspeccionar la memoria o los recursos de la CPU que consume un proceso. En ese caso, puedes usar el p cambio de top como se muestra a continuación.

top -p 2113

Quizás necesite mostrar todos los procesos en ejecución para un nombre de usuario específico. El top comando ofrece el u cambie para mostrar solo los procesos de un usuario específico. Como se ve en el siguiente ejemplo, los PID coinciden solo con el ID de usuario bkindle se muestran.

top -u bkindle

Ubicar PID de procesos específicos con el pgrep Comando

Originalmente un comando de Solaris, pgrep fue portado para su uso con Linux. Combinando el poder de búsqueda del grep comando y la gestión de procesos de ps , pgrep ofrece flexibilidad para encontrar el proceso exacto al que apuntar.

Aunque ps muestra más información, pgrep está diseñado para devolver solo el PID de los procesos devueltos. pgrep ayuda a localizar el proceso utilizando los muchos parámetros de búsqueda disponibles . En el siguiente ejemplo, pgrep se muestra buscando cualquier proceso que coincida con vmtoolsd .

pgrep vmtoolsd

Del mismo modo, especifique un ID de usuario con el u cambie para recuperar solo los procesos asociados con ese usuario específico. Como se muestra a continuación, solo se devuelve un único PID para el usuario bkindle y el vmtoolsd proceso.

pgrep -u bkindle vmtoolsd

Búsqueda de procesos con Get-Process de PowerShell en Linux

Los comandos típicos de Linux funcionan muy bien, pero ¿sabía que PowerShell también puede administrar los procesos de Linux? El Get-Process cmdlet funciona de manera similar a Linux ps comando y devuelve información del proceso. Por ejemplo, tal vez necesite encontrar todos los procesos en ejecución del usuario actual, bkindle . Como se muestra a continuación, busque todos los PID (ID etiquetados por Get-Process ) del usuario bkindle .

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'

Relacionado:Cómo usar PowerShell Where-Object para filtrar todas las cosas

¡Habiendo aprendido cómo ubicar diferentes procesos, siga leyendo para descubrir todas las formas de terminar o eliminar un proceso en Linux!

Eliminación de procesos mediante los comandos Kill en Linux

En las secciones anteriores, aprendió cómo ubicar el PID del proceso al que desea enviar una señal de interrupción mediante los comandos nativos de Linux y PowerShell. Las siguientes secciones explicarán cómo usar el kill y pkill programas, sus señales asociadas y conmutadores de línea de comandos.

Gestión de señales y procesos de Linux

Las señales son el método que utiliza Linux para comunicarse con los procesos que se ejecutan en el sistema operativo. Las tres señales principales que el kill Los comandos que se usan para terminar procesos son:

  • 1 (SIGHUP):finaliza los programas interactivos y hace que los demonios (servicios en segundo plano) vuelvan a leer los archivos de configuración que utiliza el proceso.
  • 9 (SIGKILL):obliga al proceso a salir sin realizar tareas de cierre ordenadas.
  • 15 (SIGTERM):permite que un proceso finalice correctamente, como cerrar archivos abiertos cuando finaliza. Esta es la señal predeterminada que se usa cuando no se especifica un número cuando se usa el comando matar.

Si bien este artículo solo se centra en las tres señales principales que se utilizan para eliminar procesos, hay un total de 64 señales disponibles. Utilice kill -l para obtener la lista de señales y su número correspondiente.

Ahora que comprende las tres señales principales que se utilizan para finalizar un proceso, aprenda cómo eliminar un proceso en las siguientes secciones.

Uso del kill Comando para Terminar un Proceso

En el siguiente ejemplo, utilizará el kill dominio. Imagine por un momento que está ejecutando una instancia de PowerShell, llamada pwsh y el PID asignado es 22687. A continuación se muestra una forma de terminar este proceso.

  1. Use pgrep pwsh para determinar el PID para el proceso pwsh , usado en el kill comando.
  2. Utilice kill -s TERM 22687 para terminar el pwsh proceso con gracia. El TERM el comando se asigna a la señal 15 (SIGTERM) y se indica mediante el s parámetro del kill comando.
  3. Use su elección de top , ps o pgrep para verificar que el PID ya no se encuentra en la lista.

A continuación se muestra un ejemplo del proceso anterior desde un terminal bash de Ubuntu 20.04 LTS.

El killall El comando terminará todos los procesos basados ​​en un nombre en lugar de PID, lo que puede hacer que este comando sea bastante destructivo si se usa sin cuidado. Sin embargo, si elige usar este comando, use el i opción para hacer que el comando pida confirmación.

Eliminación de procesos por nombre con pkill

Es posible que haya notado que el kill El comando solo funciona con ID de proceso. Esto puede hacer que la finalización de un proceso sea un proceso complicado de varios pasos. El pkill comando, incluido en procps y procps-ng paquetes, termina un proceso basado en un nombre buscado.

Funcionalmente, el pkill El comando actúa como un envoltorio alrededor del pgrep programa. El pkill El comando envía una señal específica a cada proceso encontrado en lugar de solo enumerar los PID en la terminal. pkill difiere de kill en ese pkill solo puede usar el nombre de un proceso, no el PID.

El pkill El comando no está disponible, de forma predeterminada, en Ubuntu 20.04 LTS. Tendrás que descargar e instalar la aplicación. Para hacerlo, ejecuta sudo apt install mcollective-plugins-process -y .

Para matar un proceso usando pkill , realice los siguientes pasos:

  1. Utilice ps para verificar que la aplicación nano (un editor de texto de línea de comandos) se está ejecutando actualmente. Este paso es opcional, pero es una verificación de seguridad antes de eliminar un proceso.
  2. Utilice pkill -9 nano para finalizar por la fuerza la aplicación nano.

A continuación se muestra un ejemplo del proceso anterior desde un terminal bash de Ubuntu 20.04 LTS.

Eliminación de un proceso con el Top Comando

Cuando ejecutas el top comando para ver los procesos en ejecución, puede eliminar un proceso determinado con la k pulsación de tecla Verá un mensaje interactivo que solicita el PID de un proceso para eliminar.

Como se muestra a continuación, ejecute el top comando y presione k. Ingrese el PID que desea eliminar y presione Enter clave para terminar inmediatamente el PID.

A continuación, aprenda una alternativa más a los comandos nativos de Linux usando PowerShell Stop-Process ¡comando!

Uso de PowerShell Stop-Process Comando para Terminar un Proceso

Si los comandos nativos de Linux no son su estilo, ¡PowerShell lo tiene cubierto! Al igual que con el kill comando, puede terminar procesos usando el Stop-Process cmdlet en Linux. Una vez más, imagina que estás ejecutando un PowerShell pwsh proceso.

  1. Encuentre el PID con Get-Process -ProcessName 'pwsh' y tenga en cuenta los PID para terminar.
  2. Utilice Stop-Process -Id 29992,30014 para terminar los múltiples procesos devueltos.
  3. Utilice Get-Process -ProcessName 'pwsh' y verifique los PID, 29992 y 30014 ya no están en la lista, lo que significa que han sido rescindidos.

También puedes usar Get-Process y el kill método para terminar uno o varios procesos:(Get-Process -Id [PID]).Kill() o (Get-Process -Id [PID1,2,3,4]).Kill() .

Tenga cuidado al usar el ProcessName parámetro. El uso de este parámetro se comporta de manera similar al killall comando, y matará todos los procesos coincidiendo con los nombres proporcionados.

A continuación se muestra un ejemplo del proceso anterior desde un terminal bash de Ubuntu 20.04 LTS.

Siguientes pasos

¡Ahora debería conocer las muchas formas de encontrar y finalizar procesos en Linux! Para su próximo desafío, intente eliminar procesos de forma remota utilizando conexiones SSH o eliminando procesos que pueden estar ejecutándose en contenedores.

Relacionado:Un tipo de Windows en un mundo Linux:configuración de SSH en Linux


Linux
  1. Cómo encontrar y matar el proceso Zombie en Linux

  2. ¿La diferencia entre Kill, Pkill y Killall?

  3. script de linux para matar el proceso java

  4. Cómo eliminar todos los procesos devueltos por pgrep

  5. Linux:ver y eliminar procesos repudiados

Cómo matar procesos Zombie en Linux

Fkill:busque y elimine procesos de forma interactiva en Linux

Cómo encontrar y matar procesos en ejecución en Linux

Cómo localizar y matar un proceso con terminal Linux

Supervisión de procesos en Linux

Cómo matar procesos en Linux usando kill, killall y pkill