Domine el proceso de eliminación de Linux usando ps, pgrep, pkill y más
La gestión de procesos en Linux puede parecer desalentadora al principio para un nuevo administrador del sistema (sysadmin). Pero con una pequeña explicación y demostración, aprenderá cómo encontrar y realizar procesos de eliminación de Linux es solo cuestión de utilizar herramientas de línea de comandos como ps y kill.
En este artículo, aprenderá comandos para localizar procesos en ejecución y errantes, eliminar (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 basados en 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 previos
Este artículo será un tutorial sobre cómo administrar procesos en Linux. Si desea participar, 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 host Linux.
- Una cuenta de usuario no root. Si bien no se requiere acceso de root, habrá un ejemplo en el que el usuario root puede finalizar el proceso en ejecución de otro usuario.
La distribución de Linux que elija utilizar depende de usted. Este artículo se basará en Ubuntu 20.04 LTS. Sin embargo, los comandos son estándar para el sistema operativo Linux.
¿Listo para comenzar? Bien, profundicemos.
Gestión de procesos en Linux
En ocasiones, es posible que se encuentre con una situación en la que necesite detener un proceso en ejecución en un sistema Linux. Como ejemplo, es posible que tenga un script bash que se ejecute según una programación. Ese script bash está configurado para ejecutarse como otro usuario a través de un trabajo cron (programador de procesos de Linux).
A veces, este script genera procesos erróneos que pueden hacer que el script falle. ¿Cómo se eliminan esos procesos erróneos sin reiniciar el sistema o detener el script?
En las siguientes secciones, analizará los comandos utilizados para localizar y finalizar o eliminar procesos en un sistema Linux. Cada sección se basará en la anterior. Aprenderá sobre los comandos ps, top, pgrep, kill y pkill. todo nativo de Linux.
Como beneficio adicional, se incluyen los comandos equivalentes de PowerShell Get-Process y Stop-Process si los comandos nativos de Linux no son su estilo.
Herramientas para localizar procesos
Antes de finalizar un proceso, debe localizar el proceso correcto al que apuntar. El PID exclusivo permite una orientación precisa. Continúe leyendo para aprender cómo localizar los procesos correctos para la terminación.
Uso del comando ps para mostrar información del proceso
El comando Estado del proceso o ps 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á, de forma predeterminada, todos los procesos para la identificación efectiva del usuario (EUID) del usuario actual. Al ejecutar el comando ps, como se muestra a continuación, se devolverán todos los procesos en ejecución que su usuario pueda finalizar.
ps
Encontrar información de proceso ampliada utilizando el comando top
¿Qué sucede si desea encontrar información que se actualice constantemente sobre los procesos en ejecución y las métricas del sistema? En ese caso, puede usar el comando top. A diferencia de ps, el comando top actualiza la información del proceso en la pantalla durante un intervalo establecido.
Cuando ejecuta el comando top, verá más que solo un PID. Con los detalles del proceso se incluyen porcentajes de CPU y memoria, valores Nice (prioridad del proceso de programación de CPU) y la prioridad del proceso (PR) establecida por el kernel de Linux.
Para un administrador de sistemas nuevo o experimentado, el comando top suele ser la herramienta principal para administrar recursos y procesos vitales del sistema. Como se muestra a continuación, la salida del comando top muestra más información del proceso que el comando ps, 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 CPU que consume un proceso. En ese caso, puede utilizar el interruptor p 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 comando top ofrece el interruptor u para mostrar solo los procesos de un usuario específico. Como se ve en el siguiente ejemplo, se muestran los PID que coinciden solo con el ID de usuario bkindle.
top -u bkindle
Localización de PID de procesos específicos con el comando pgrep
Originalmente un comando de Solaris, pgrep fue adaptado para su uso con Linux. Combinando el poder de búsqueda del comando grep 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, se muestra pgrep buscando cualquier proceso que coincida con vmtoolsd.
pgrep vmtoolsd
De manera similar, especifique una ID de usuario con el modificador u para recuperar solo los procesos asociados con ese usuario específico. Como se muestra a continuación, solo se devuelve un PID para el usuario bkindle y el proceso vmtoolsd.
pgrep -u bkindle vmtoolsd
Encontrar procesos con Get-Process de PowerShell en Linux
Los comandos típicos de Linux funcionan muy bien, pero ¿sabías que PowerShell también puede administrar procesos de Linux? El cmdlet Get-Process funciona de manera similar al comando ps de Linux y devuelve información del proceso. Por ejemplo, quizás necesite encontrar todos los procesos en ejecución del usuario actual, bkindle. Como se muestra a continuación, busque todos los PID (etiquetados como ID por Get-Process) del usuario bkindle.
Get-Process -IncludeUserName |
Where-Object {$_.UserName -eq 'bkindle'} |
Select-Object -Property 'Id','UserName','ProcessName'
Relacionado: Cómo utilizar el objeto Where de PowerShell para filtrar todas las cosas
Habiendo aprendido a localizar diferentes procesos, ¡sigue leyendo para descubrir todas las formas de terminar o eliminar un proceso en Linux!
Eliminar procesos utilizando los comandos Kill en Linux
En secciones anteriores, aprendió cómo ubicar el PID del proceso al que desea enviar una señal de interrupción utilizando comandos nativos de Linux y PowerShell. Las siguientes secciones explicarán cómo utilizar los programas kill y pkill, sus señales asociadas y modificadores de línea de comandos.
Gestión de procesos y señales 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 utiliza el comando kill para finalizar 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): fuerza la salida del proceso sin realizar tareas de cierre elegantes.
- 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 ningún número al usar el comando kill.
Si bien este artículo solo se centra en las tres señales principales utilizadas para los procesos de eliminación, hay un total de 64 señales disponibles. Utilice
kill -lpara obtener la lista de señales y su número correspondiente.
Ahora que comprende las tres señales principales utilizadas para finalizar un proceso, aprenda cómo finalizar un proceso en las siguientes secciones.
Uso del comando kill para finalizar un proceso
En el siguiente ejemplo, utilizará el comando kill. Imagine por un momento que está ejecutando una instancia de PowerShell, denominada pwsh, y que el PID asignado es 22687. A continuación se muestra una forma de finalizar este proceso.
- Utilice
pgrep pwshpara determinar el PID para el procesopwsh, utilizado en el comandokill. - Utilice
kill -s TERM 22687para finalizar el procesopwshcorrectamente. El comandoTERMse asigna a la señal 15 (SIGTERM) y se indica mediante el parámetrosdel comandokill. - Utilice su elección de
top,psopgreppara verificar que el PID ya no aparezca en la lista.
A continuación se muestra un ejemplo del proceso anterior desde una terminal bash Ubuntu 20.04 LTS.
El comando
killallfinalizará todos los procesos basándose 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 utilizar este comando, utilice la opciónipara que el comando solicite confirmación.
Eliminar procesos por nombre con pkill
Es posible que hayas notado que el comando kill solo funciona con ID de proceso. Esto puede hacer que la finalización de un proceso sea un proceso complicado de varios pasos. El comando pkill , incluido en los paquetes procps y procps-ng, finaliza un proceso basado en un nombre buscado.
Funcionalmente, el comando pkill actúa como un contenedor alrededor del programa pgrep. El comando pkill envía una señal específica a cada proceso encontrado en lugar de solo enumerar los PID en la terminal. pkill se diferencia de kill en que pkill solo puede usar el nombre de un proceso, no el PID.
El comando
pkillno está disponible, de forma predeterminada, en Ubuntu 20.04 LTS. Tendrás que descargar e instalar la aplicación. Para hacerlo, ejecutesudo apt install mcollective-plugins-process -y.
Para finalizar un proceso usando pkill, realice los siguientes pasos:
- Utilice
pspara 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 finalizar un proceso. - Utilice
pkill -9 nanopara finalizar forzadamente la aplicación nano.
A continuación se muestra un ejemplo del proceso anterior desde una terminal bash Ubuntu 20.04 LTS.
Matar un proceso con el comando Top
Cuando ejecuta el comando top para ver los procesos en ejecución, puede finalizar un proceso determinado con la pulsación de tecla k. Verá un mensaje interactivo que le solicitará el PID de un proceso para finalizar.
Como se muestra a continuación, ejecute el comando top y presione k. Ingrese el PID que desea eliminar y presione la tecla Enter para finalizar inmediatamente. el PID.
A continuación, conozca una alternativa más a los comandos nativos de Linux utilizando el comando Stop-Process de PowerShell.
Uso del comando Stop-Process de PowerShell para finalizar un proceso
Si los comandos nativos de Linux no son su estilo, ¡PowerShell lo tiene cubierto! Al igual que con el comando kill, puede finalizar procesos utilizando el cmdlet Stop-Process en Linux. Una vez más, imagine que está ejecutando un proceso pwsh de PowerShell.
- Encuentre el PID con
Get-Process -ProcessName 'pwsh'y anote los PID para terminar. - Utilice
Stop-Process -Id 29992,30014para finalizar los múltiples procesos devueltos. - Utilice
Get-Process -ProcessName 'pwsh'y verifique que los PID,29992y30014ya no aparezcan en la lista, lo que significa que han sido cancelados.
También puede utilizar
Get-Processy el métodokillpara finalizar uno o varios procesos:(Get-Process -Id [PID]).Kill()o(Get-Process -Id [PID1,2,3,4]).Kill().Tenga cuidado al utilizar el parámetro
ProcessName. El uso de este parámetro se comporta de manera similar al comandokillally eliminará todos los procesos que coincidan con los nombres proporcionados.
A continuación se muestra un ejemplo del proceso anterior desde una terminal bash Ubuntu 20.04 LTS.
Próximos pasos
¡Ahora debería conocer las muchas formas de buscar y finalizar procesos en Linux! Para su próximo desafío, intente eliminar procesos de forma remota utilizando conexiones SSH o eliminando procesos que puedan estar ejecutándose en contenedores.
Relacionado: Un chico de Windows en un mundo de Linux: configurar SSH en Linux










