Los sistemas operativos de multiprocesamiento como Linux y BSD emplean varios métodos para maximizar la utilización de la CPU. Un proceso es simplemente un programa en ejecución. Dado que habrá más de un proceso de Linux ejecutándose en un momento dado, la gestión de procesos en Linux es extremadamente crucial. Los usuarios a menudo se enfrentan a problemas como la aceleración de los recursos de la CPU cuando ejecutan demasiados programas. Situaciones como esta surgen cuando la CPU no puede manejar la creciente cantidad de procesos. Aunque esto no depende completamente de la potencia de su CPU, lidiar con procesos bloqueados o zombis puede ser bastante frustrante. Para ayudarlo a mitigar tales ocurrencias, describimos algunas formas estándar de eliminar estos procesos.
Domine la gestión de procesos que no responden en Linux
Aprenderá varias formas de finalizar un proceso de Linux que no responde en absoluto. Si viene de Windows, es posible que esté familiarizado con Ctrl+Alt+Supr. Del mismo modo, los usuarios de Mac tienen el método Comando+Opción+Escape para eliminar los procesos congelados. Linux es mucho más versátil que sus contrapartes y ofrece más de un método para abordar procesos inactivos o que no responden.
Diferentes métodos para eliminar un proceso Linux muerto
Esbozaremos principalmente dos métodos para matar procesos zombie. Usaremos la terminal de Linux para el primer método. Para esto, primero necesitaremos identificar la identificación del proceso. Una vez obtenido con éxito, podemos usar este PID para matar el programa enviando señales específicas a ese PID.
También aprenderá cómo realizar tales trabajos de finalización de Linux desde la interfaz gráfica de usuario o la ventana X. Vamos a aprovechar el ‘Monitor del sistema’ aplicación disponible en Ubuntu para esto. Aunque esta es una aplicación de GNOME, hay herramientas similares disponibles para otros entornos de escritorio de Linux.
Terminar un proceso que no responde desde la línea de comandos
Hay varias herramientas para finalizar un proceso que no responde o que está bloqueado desde la línea de comandos, incluido kill , pkill y matar a todos . Estos comandos funcionan enviando señales específicas a estos procesos que no responden. Vas a necesitar la identificación del proceso o PID información para que pueda enviarles la señal de terminación requerida.
El PID o ID de proceso es un número único que identifica un proceso. Estos son creados por el kernel de Linux durante el tiempo de ejecución, y el planificador de procesos controla sus actividades de CPU. Por lo tanto, siempre que invoque una aplicación, el kernel primero generará los procesos necesarios y les asignará estos valores PID únicos. Puede haber múltiples PID asociados con un proceso. Además, cada proceso tiene un proceso principal único con un PPID (ID de proceso principal) único.
Entonces, si puede encontrar este PPID, entonces podrá enviar una señal de eliminación utilizando programas diseñados para este propósito. A continuación, aprenderá cómo verificar los procesos en ejecución en Linux e identificar su PPID desde la terminal.
Descubra la información de PPID
- -Puede averiguar el PPID de un proceso utilizando varios comandos de gestión de procesos en Linux, como pidof , pstree y pgrep . Examinémoslos uno por uno y veamos cómo obtener el PID de un proceso de Linux.
Método 1:usar el comando ps
El comando ps en Linux muestra todos los procesos en ejecución junto con otra información relacionada con el proceso, como el PID en la terminal. Podemos usar este comando para enumerar todos los procesos y luego filtrar un proceso específico usando los comandos grep de Linux. Debería mostrarnos la información de identificación del proceso que nos interesa.
$ nano > /dev/null &
$ ps aux | grep "nano"
Primero, invocamos un editor de texto de Linux en segundo plano. Luego, usamos el comando ps junto con el comando grep para averiguar el PPID de este editor. La salida puede contener varios ID de proceso, pero solo nos interesa el primero, ya que es nuestro PPID. También podemos usar el comando awk de Linux para encontrar esta información, como se muestra a continuación.
$ ps aux | awk '/nano/ {print $2}'
Este comando es más flexible ya que suprime toda la información irrelevante. Solo mostrará la información de PPID que estamos buscando.
Método 2:usar el comando pstree
El comando pstree nos proporciona una vista en forma de árbol de todos los procesos en ejecución. Proporciona una vista gráfica de la lista de tareas de Linux desde la ventana del terminal. Puede ver el PPID, así como toda la información de PID de un proceso usando este comando. Consulte los siguientes ejemplos para aprender cómo aprovechar pstree para encontrar el PPID de un proceso específico.
$ nano > /dev/null &
$ pstree -p | grep 'nano' $ pstree -p | awk '/nano/ {print $NF}'
Primero, hemos generado un proceso en segundo plano usando el primer comando. El segundo comando luego recupera el PPID de este proceso usando el comando grep en Linux. Finalmente, el tercer comando nos muestra cómo recuperar este valor usando el comando awk.
Método 3:usar el comando pgrep
El comando pgrep es uno de los comandos de gestión de procesos más sencillos de Linux. Comprueba la lista de todos los procesos en ejecución e imprime el PPID de un proceso dado en la salida estándar o en la terminal en nuestro caso. Funciona realizando coincidencias de expresiones regulares y es muy adecuado para escribir scripts de shell de Linux.
$ nano > /dev/null &
$ pgrep 'nano'
Hemos generado el proceso nano de manera similar a los ejemplos anteriores. Entonces hemos obtenido su PPID usando el comando pgrep. Una vez que obtengamos este valor, podemos realizar el trabajo de terminación de Linux muy fácilmente.
Método 4:Uso del comando pidof
El comando pidof es otra forma simple pero útil de determinar el PPID de un proceso de Linux. Muestra tanto el PPID como todos los demás PID asociados con un proceso. Consulte el examen a continuación para ver cómo usar esto en la práctica.
$ nano > /dev/null &
$ pidof nano $ pidof -s nano
Al usar el comando pidof para verificar los procesos en ejecución en Linux, a menudo verá varios PID. Por lo general, en tales casos, el primer o el último número es el PPID, dependiendo de si están en orden ascendente o descendente. Puedes usar la -s opción de pidof para mitigar esto. Solo mostrará el valor de PPID.
Método 5:usar el comando superior
El comando superior proporciona una vista en tiempo real de todos los procesos en ejecución en sistemas operativos similares a Unix. Puede usar esto para mostrar la lista de tareas de Linux en su terminal y encontrar la información de PID de un proceso específico.
$ top
Use los siguientes comandos para recuperar el PPID de un proceso en particular desde la salida del comando superior.
$ nano > /dev/null &
$ top -n1 -b | grep 'nano' $ top -n1 -b | awk '/nano/ {print $1}'
Dado que top proporciona resultados en tiempo real en lugar de volcar datos estáticos en el terminal, hemos utilizado el -n1 y -b opción para imprimir la salida estática. Luego puede recuperar la información de PPID utilizando el comando grep o el comando awk en Linux.
Elimine el proceso de Linux que no responde
Puede usar cualquiera de los métodos anteriores para recuperar el PPID del proceso que no responde. Una vez que obtenga esto, es hora de matar el proceso por completo. Hay varios comandos que nos permiten hacer esto, como matar , pkill y matar a todos . Veremos cómo funcionan uno por uno en las siguientes secciones.
Método 1:usar el comando matar
El comando kill es ampliamente utilizado por los administradores de Linux debido a su simplicidad y acciones robustas. Toma el PID del proceso y una señal. El núcleo mata/detiene la ejecución del proceso en función de esta señal. Puede usar el siguiente comando para ver todas las señales disponibles para el comando de eliminación.
$ kill -l
Como puede ver, kill ofrece 64 señales diferentes. Sin embargo, solo discutiremos dos de ellos en esta guía. Estas son la señal 9 (SIGKILL) y la señal 15 (SIGTERM). SIGTERM o la señal 15 es el método seguro para eliminar un proceso que no responde. SIGKILL o señal 9, por otro lado, mata a la fuerza un proceso de Linux.
$ kill -9 8631 $ kill -KILL 8631
Los comandos anteriores son equivalentes y obligarán a eliminar el proceso que tiene el PID 8631. Ese es el PPID del proceso 'nano' en mi sistema. Reemplace esto con el PID del proceso que no responde en su sistema.
$ kill -15 8631 $ kill -TERM 8631
Los comandos anteriores también son equivalentes y terminarán el proceso con gracia. Es por eso que puede tomar algún tiempo antes de que se elimine el proceso. Además, es posible que deba agregar sudo antes del comando de eliminación si el proceso es propiedad de otro usuario.
Método 2:usar el comando pkill
El comando pkill es uno de los comandos de gestión de procesos más versátiles de Linux. Nos permite eliminar un proceso que no responde en función de su nombre, PID, propietario y otros atributos de tiempo de ejecución. Es una herramienta perfecta para usuarios principiantes o personas que no están familiarizadas con muchos comandos de terminal estándar.
$ pkill nano $ pkill 8631 $ pkill -e nano $ pkill -f nano
Puede usar cualquiera de los comandos pkill anteriores para eliminar un proceso zombi/que no responde en Linux. Usa la -e opción si desea una confirmación en el trabajo de eliminación de Linux. El comando pkill también permite a los usuarios enviar señales de terminación específicas.
Método 3:Uso del comando killall
El comando killall permite a los usuarios eliminar procesos que no responden en función de sus nombres. Es más fácil de usar, pero puede plantear problemas si no se tiene cuidado. Dado que killall finaliza los procesos en función de los nombres, siempre existe la posibilidad de que termine matando un proceso por casualidad. Por ejemplo, si hay diferentes versiones de nano disponibles en su sistema, el primer ejemplo las matará a todas.
$ killall nano $ killall --verbose nano $ killall --interactive nano $ killall --signal KILL nano
El primer ejemplo muestra el uso básico del comando killall en Linux. El segundo comando informará si el trabajo de finalización se realizó correctamente o no, y el tercer comando le pedirá confirmación al usuario antes de finalizar el proceso. Por defecto, killall usa la señal SIGTERM para matar procesos. Sin embargo, puede especificar la señal manualmente, como se muestra en el último ejemplo.
Método 4:Uso de frases ingeniosas prácticas
La verdadera belleza de Linux radica en el hecho de que permite a los usuarios crear combinaciones de comandos sofisticadas según sus necesidades. Para demostrar esto, hemos esbozado algunas frases ingeniosas en la sección.
$ nano > /dev/null &
$ kill -9 $(pgrep nano) $ ps aux | grep -e 'nano' | awk '{print $2}' | xargs kill -9
En el primer ejemplo, hemos utilizado la interpolación de shell para pasar el PID del proceso 'nano' al comando kill de Linux. El segundo ejemplo utiliza varios comandos de terminal cotidianos y redirección de E/S para acabar con el proceso. Puede seleccionar sus propias frases ingeniosas una vez que se sienta cómodo con la terminal de Linux.
Método 5:elimine varios procesos con scripts de shell de Linux
A veces, los usuarios pueden querer terminar más de un solo proceso. Podemos automatizar fácilmente tales tareas escribiendo simples scripts de shell. Si está interesado en este tema, consulte nuestra guía anterior sobre scripts de shell de Linux. La siguiente secuencia de comandos recuperará el PPID de los procesos que desea eliminar y luego los terminará mediante señales de eliminación.
$ nano proc-killer.sh
#!/usr/bin/env bash for pro in "[email protected]" do pid=$(pgrep $pro | head -1) echo $pid comm="kill -9 $pid" eval $comm done
Ahora, guarde este archivo y agregue el permiso de ejecución emitiendo el siguiente comando.
$ chmod +x proc-killer.sh
Ahora puede pasar a este script el nombre de los procesos que desea finalizar.
$ ./proc-killer.sh nano gedit vlc
Simplemente reemplace los argumentos con los nombres de los procesos de Linux que no responden en su sistema.
Terminar un proceso que no responde desde la GUI
También puede finalizar un proceso que no responde desde la interfaz gráfica de usuario o la ventana X. Discutimos dos métodos para hacer esto en la siguiente sección.
Método 1:Uso de la aplicación xkill
Las distribuciones modernas de Linux utilizan la ventana gráfica X para proporcionar a los usuarios una experiencia gráfica elegante. Hay una herramienta simple llamada xkill que permite a los usuarios cerrar una ventana de GUI que no responde. Es posible ya que, en Linux, la ventana de título de una aplicación está separada de la propia aplicación.
Simplemente vaya a su emulador de terminal Linux y escriba xkill. Transformará el cursor de su mouse en un botón X, que puede usarse para cerrar cualquier ventana GUI.
$ xkill
Ahora, todo lo que necesita hacer es simplemente hacer clic en la barra de la ventana de la aplicación que no responde, y se eliminará y desaparecerá instantáneamente.
Método 2:uso de la aplicación System Monitor en Ubuntu
La mayoría de las distribuciones principales de Linux vienen con algún tipo de herramientas de monitoreo de GUI que permiten a los usuarios finalizar gráficamente un proceso de Linux bloqueado. Por ejemplo, la aplicación System Monitor en Ubuntu nos permitirá finalizar un proceso que no responde de manera intuitiva. Simplemente puede seleccionar el proceso inactivo de la lista de procesos y eliminarlo haciendo clic con el botón derecho en el proceso y seleccionando la opción de eliminación.
Existen muchas más alternativas a esta aplicación, y estamos seguros de que podrás encontrar fácilmente alguna para tu distribución o entorno de escritorio.
Pensamientos finales
Dado que la gestión de procesos en Linux es muy versátil, los usuarios a menudo se sienten frustrados cuando se trata de procesos que no responden. Es por eso que nuestros editores han descrito todas las formas posibles de terminar un proceso de Linux inactivo en esta guía. Después de leer esto, debería poder eliminar cualquier proceso que no responda desde la línea de comandos o desde la GUI. También puede utilizar cualquiera de nuestros comandos de una sola línea para hacer frente a tales molestias en el menor tiempo posible. Además, incluso puede eliminar más de un solo proceso utilizando nuestro sencillo script de shell. Esperamos que haya obtenido la información que buscaba de nuestra guía.