Volver al blog

Administrar procesos en Linux: una guía sobre el uso de ps, kill y nice

Administrar procesos en Linux: una guía sobre el uso de ps, kill y nice

Introducción

Cuando la mayoría de nosotros usamos computadoras, ejecutamos varias aplicaciones. Estas aplicaciones son ejecutadas por programas llamados servidores o sistemas operativos. Hay muchos tipos diferentes de servidores que funcionan de diferentes maneras. Uno de ellos es Linux. Linux ejecuta aplicaciones en forma de procesos.

En Linux, nos referimos a cada aplicación como un 'proceso'. El servidor es capaz de gestionar el aspecto de bajo nivel del ciclo de vida del proceso. Como usuario, es posible que deba interactuar con el servidor para manipular algunos aspectos de nivel superior. Puede comunicarse con el sistema operativo y gestionarlo utilizando varias herramientas. Hay muchos comandos que puede utilizar para modificar diversos aspectos y funciones del servidor. Aquí tiene un tutorial fácil de seguir sobre cómo configurar fácilmente su servidor basado en Linux en Ubuntu. Además, puede aprender cómo instalar el Stack LAMP (Linux, Apache, MySQL, PHP).

Esta guía se centra en cómo puede utilizar ps, kill y nice para gestionar procesos en Linux.

Visualización de procesos en ejecución en Linux

  • top

Para empezar, uno de los comandos más básicos que debe conocer es top. Esta herramienta le ayuda a visualizar qué procesos se están ejecutando actualmente en el sistema. Así es como aparecerá cuando lo ejecute:

top command output

 

En la parte superior del resultado, puede localizar las estadísticas del sistema. Esto le proporciona información sobre cosas como la carga del sistema y una serie de tareas. En este ejemplo, puede determinar que hay un proceso en ejecución y 55 procesos inactivos. Los procesos inactivos o en reposo son los que no está utilizando actualmente. Esto significa que no están ocupando los recursos del sistema. Por último, puede ver todos los procesos en ejecución cerca de la parte inferior de la ventana emergente con las estadísticas de uso.

  • htop

Antes de utilizar este comando, tendrá que instalarlo desde los repositorios escribiendo y ejecutando lo siguiente:

Una vez que lo tenga, puede utilizarlo para mostrar información similar a la que obtuvo con top. La diferencia principal es que con el comando htop, obtiene un resultado más amigable para el usuario:

htop command output

Como puede ver, este resultado es fácil de seguir e interpretar.

Uso de ps para listar procesos

Aunque puede utilizar los comandos mencionados anteriormente para ver los procesos en ejecución, es posible que no siempre cubran todos los escenarios. Afortunadamente, tenemos a nuestra disposición una herramienta más potente y flexible. Se trata del comando ps.

Exploremos lo que verá si ejecuta el comando tal cual:

ps command output

En esta salida, puede ver todos los procesos que se están ejecutando en relación con el usuario y la sesión actuales. Sin embargo, esto no le proporciona mucha información.

Si desea una visión más holística de todos los procesos que se ejecutan en el sistema, debe utilizar un argumento. Un argumento le permite ver todos los procesos que pertenecen a todos los usuarios, independientemente de la asociación de terminal. La salida también aparece en un formato muy amigable y fácil de leer. Aquí tiene un ejemplo:

ps aux

Por otro lado, también puede visualizar esta información en formato de árbol. Aquí, como verá, las relaciones jerárquicas también se vuelven evidentes:

output in tree format

En este ejemplo, puede ver cómo se muestra kthreadd como el padre de los procesos que le siguen a continuación.

  • What are Process IDs?

Como usuario de Linux o Unix, debe conocer los IDs de proceso. También conocidos como PIDs, son identidades únicas asignadas a cada proceso por el sistema. Estas identidades son la forma en que el servidor realiza un seguimiento de cada proceso individual. Para conocer el PID de un proceso determinado, debe utilizar el comando pgrep, de esta manera:

Cuando arranca su sistema, el primer proceso comienza a ejecutarse. Este proceso se llama init. Como mecanismo predeterminado, el proceso init obtiene el PID de '1'. Puede comprobar el PID de este proceso de la siguiente manera:

El proceso init tiene la responsabilidad de arrancar luego todos los demás programas o procesos. Como es de suponer, los siguientes procesos tendrán PIDs crecientes o mayores.

  • ¿Qué son los procesos padre?

Otro concepto que se debe conocer es el proceso padre. Si el proceso A genera el proceso B, entonces el proceso A es el proceso padre del proceso B. Para ayudar a distinguirlos, el sistema asigna a los procesos padres un PPID. Puede notar este PPID en los encabezados de las columnas cada vez que ejecuta cualquier comando de administración como top, htop y ps.

  • ¿Qué son las relaciones padre-hijo?

Como ya sabemos, los procesos padres generan procesos hijos. Esta creación ocurre en dos pasos. El primero es fork(). Este comienza creando un nuevo espacio de direcciones. También copia los recursos del padre utilizando copy-on-write para que también estén disponibles en el proceso hijo. El segundo es exec(). Este se encarga de cargar y ejecutar un ejecutable en el espacio de direcciones recién creado.

  • ¿Qué pasa si el proceso hijo muere antes que el proceso padre?

En caso de que esto suceda, el proceso hijo se convierte en un zombie. Es decir, hasta que el proceso padre recopile alguna información sobre él o le diga al kernel que no necesita la información asociada. Una vez que esto sucede, los recursos que el proceso estaba utilizando quedarán libres.

  • ¿Qué pasa si el proceso padre muere antes que el proceso hijo?

En este escenario, el sistema reasignará el proceso hijo a otro proceso padre. Puede ser init o cualquier otro proceso.

Envío de señales a procesos en Linux

Puede hacer que un proceso determinado le responda enviándole una señal. Las señales le ayudan a comunicarse con el sistema operativo. Puede utilizar la señal para hacer que una aplicación finalice, se inicie o modifique un comportamiento o tarea determinados.

  • Uso del PID para enviar señales

Una de las utilidades que puede utilizar para enviar señales en Linux es kill. Este comando, como sugiere su nombre, le ayuda a finalizar o matar un proceso:

Esta utilidad envía la señal TERM al proceso, lo que le indica que finalice el proceso. El comando hace que la aplicación realice una limpieza y salga con facilidad. En caso de que el programa no salga sin problemas con la señal TERM, puede ir directamente enviando la señal KILL:

Esta señal no va al programa. Va al kernel del sistema operativo. El kernel cerrará directamente el proceso. Puede usar esto cuando un programa esté ignorando las señales que le está enviando.

En este comando, también puede reemplazar el nombre de la señal con el número asociado a ella. Por ejemplo, puede usar ‘-15’ en lugar de ‘-TERM’. De manera similar, puede reemplazar ‘-KILL’ por ‘-9’.

  • Uso de señales para diversos fines

Puede usar señales para hacer otras cosas además de matar o finalizar programas. Por ejemplo, un problema que puede tener es lidiar con el reinicio de demonios. Cada vez que un demonio recibe una señal de colgado o HUP, se reiniciará en programas como Apache. Para evitar esto, puede usar la siguiente señal:

Este comando hará que Apache vuelva a cargar su configuración. Como resultado, continuará sirviéndole el contenido relevante.

Si desea ver qué señales puede enviar con la utilidad kill, use el siguiente comando:

list of signals

  • Envío de señales por nombre

Tradicionalmente, enviaría una señal utilizando el PID del programa. Sin embargo, tiene la opción de enviar señales utilizando el nombre normal del proceso. Para hacer esto, puede usar el comando pkill. Funciona de manera similar a cómo funciona el comando pkill. La única diferencia es que le permite usar el nombre del proceso:

Este comando pkill es el equivalente del siguiente comando kill:

También tiene un comando para cuando desea enviar una señal a cada instancia en lugar de a un proceso en particular. El siguiente comando enviará una señal TERM a todas las instancias de Firefox que se estén ejecutando en el sistema:

Ajuste de prioridades de procesos

Otra cosa que puedes hacer con los comandos de Linux es ajustar las prioridades. Esto significa que puedes decidir qué proceso tiene prioridad en el entorno de tu servidor. Puede haber ciertos procesos que consideres críticos. Otros pueden no ser tan necesarios. El sistema solo ejecutará estos últimos programas cuando queden recursos libres.

Puedes controlar la prioridad de los procesos en Linux a través del comando niceness. Este valor indica las tareas de alta prioridad como menos 'nice' (amables) y los procesos de baja prioridad como más 'nice'. Piénsalo de esta manera: los procesos de alta prioridad son menos 'nice' porque están acaparando los recursos. Las tareas de baja prioridad los están compartiendo, por lo que son más 'nice'.

Puedes ver el valor 'nice' de un proceso determinado cuando ejecutas el comando top. Este valor se encuentra en la columna ‘NI’. Las tareas de alta prioridad tendrán valores 'nice' que oscilan entre ‘-19/-20’. Los procesos de baja prioridad oscilan entre ‘19/20’. Verás algo como esto:

Si deseas ejecutar un proceso con un valor nice asignado personalmente, simplemente necesitas usar el comando nice:

Este comando solo funcionará cuando estés iniciando el programa en cuestión. Si deseas cambiar el valor nice de un programa que ya se está ejecutando, debes usar renice:

Conclusión

Como puedes ver, las herramientas aquí son bastante diferentes de las gráficas. Como resultado, pueden ser difíciles de entender para un principiante. Esta guía te ayudará a familiarizarte con los comandos. Practicar más te ayudará a aprender mejor y a utilizarlos de manera más eficiente.

Consulta nuestros otros recursos que pueden ayudarte a administrar mejor tus servidores Linux, incluidos tutoriales sobre cómo configurar tu servidor Linux para usar autenticación basada en claves SSH, localizar archivos en tu sistema VPS Linux con whereis, which, whatis, readlink y find, y leer y establecer variables de entorno y de shell en un VPS Linux.

¡Feliz informática!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev es diseñador creativo en CloudSigma, centrado en una identidad empresarial coherente mediante el uso de canales de marketing tradicionales e innovadores. Es experto en fusionar la visión artística con el marketing estratégico para crear narrativas de marca impactantes.

Comentarios

Aún no hay comentarios. Sea el primero.