Saltar al contenido

Procesos de Linux – Parte 2

Dada la relación padre/hijo entre los procesos, a menudo es necesario visualizar una lista jerárquica de procesos en forma de árbol. Para ello, utilizaremos una herramienta llamada pstree.

Si el comando es seguido por

Procesos de Linux – Parte 2
Procesos de Linux – Parte 2
  • Un PID, entonces el árbol se mostrará con tal proceso en su raíz. De lo contrario, está enraizado en PID=1.
  • Un nombre de usuario, pstree devolverá todos los árboles propiedad del usuario.

Además de mostrar sólo el nombre de los procesos, pstree también puede devolver sus PID cuando se utiliza con la opción -p. La siguiente imagen muestra todos los árboles propiedad de . Las imágenes de la izquierda y la derecha muestran la salida con y sin el uso de -p. El número entre paréntesis es el PID de cada proceso.

A la derecha, podemos ver que tmux (PID=1470) es el padre de dos procesos bash (PID=1471 y PID=1486). Este último es a su vez el padre de pstree. Este sencillo ejemplo ilustra la utilidad de pstree para ver de un vistazo los árboles de procesos de un usuario determinado.

Top y Uptime

Aunque es útil utilizar la ps para tomar instantáneas de la lista de procesos, puede ser necesario vigilar esa lista dinámicamente con intervalos de actualización. En lugar de hacer ps varias veces, Linux proporciona otra herramienta llamada top que es más adecuada para el trabajo.

Además, la parte superior muestra la misma información sobre el tiempo de funcionamiento que podemos ver abajo:

La imagen de arriba indica que la hora actual es 19:23:57. El sistema ha estado en funcionamiento durante 1 hora y 10 minutos y el promedio de carga en el último minuto, 5 minutos y 15 minutos ha sido de 0,03 (3%), 0,02 (2%) y 0,00 (0%), respectivamente. Estos porcentajes representan el uso de la CPU al ejecutar procesos en los intervalos de tiempo especificados. En un sistema con múltiples CPU, estos números deben dividirse por el número de procesadores para averiguar el promedio de uso de la CPU. Si experimenta constantemente un alto uso de la CPU, puede ser el momento de agregar recursos de hardware a la máquina o de trasladar los servicios más necesitados de CPU a otro sistema.

Prioridades de ejecución del proceso

Sin ninguna intervención por nuestra parte, el núcleo ajustará automáticamente los ciclos de la CPU que se asignan a un determinado proceso. Sin embargo, Linux también permite al administrador del sistema cambiar este comportamiento a través de los comandos nice (para nuevos procesos) y renice (para procesos en ejecución). Ambas herramientas utilizan un valor entero en el rango de -20 a 19 para modificar la prioridad que se debe dar a un proceso en términos de uso de la CPU. Cuanto más bajo es el valor, menos agradable la aplicación – lo que significa que ocupará más recursos del sistema.

Un usuario habitual sólo puede aumentar la amabilidad de un proceso que posee. No puede disminuirlo ni cambiar la prioridad de los procesos que son propiedad de otros usuarios. Se trata de tareas administrativas que deben realizarse ya sea como root o utilizando sudo como se explicó anteriormente.

Para cambiar el precio de un proceso, utilice el precio seguido del nuevo valor de nicho, y -p [PID] donde [PID] es el PID del proceso. Por ejemplo, la siguiente imagen muestra cómo aumentar la prioridad de snapd de 0 (actual) a -5. No sólo verá el cambio del valor de niceness y el uso de ps con otro especificador de formato (ni) para devolver esta información. Además, –pid seguido de un PID nos permite ver los campos de proceso del proceso correspondiente solamente.

123ps -o pid,cmd,ni --pid=940sudorenice -5 -p 940ps -o pid,cmd,ni --pid=940

bash

Después de cambiar el valor de niceness de snapd , el núcleo comenzará a asignar más ciclos de CPU para él.

Procesos de matanza

Los procesos pueden ser forzados a terminar enviándoles señales usando los comandos kill o killall. El primero requiere el PID del proceso que queremos manipular, mientras que el segundo nos permite terminar procesos por nombre o especificando el usuario propietario.

Sólo se debe considerar la posibilidad de terminar un proceso manualmente cuando no haya respondido o esté interfiriendo con el funcionamiento normal de otros procesos. Por ejemplo, un plugin anticuado o fallido que se ejecuta en un navegador web puede causar que el navegador -y en última instancia el sistema- se bloquee. En este escenario, el uso de la memoria se dispara típicamente. Antes de que eso suceda, es una buena idea terminar el proceso del navegador y desinstalar el plugin infractor tan pronto como sea posible.

Para matar un proceso por PID (digamos PID=1025), haz

1sudo kill -SIGTERM 1025

Si ignora esta señal, puede recurrir a una medida más drástica usando -SIGKILL en su lugar:

1sudokill -SIGKILL 1025

bash

Sin embargo, hay que tener en cuenta que se prefiere el uso de SIGTERM ya que da al proceso la posibilidad de cerrar los archivos que pueda estar utilizando (también conocido como terminación limpia ).

Si queremos terminar todos los procesos de un usuario en particular, killall es más apropiado. El comando debe ser seguido por -u [USUARIO], donde [USUARIO] es el propietario de los procesos. Por ejemplo,

1sudokillall -u www-data

bash

terminará todos los procesos propiedad de www-data . Por cierto, esta cuenta es la propietaria por defecto del servidor web Apache en Debian, Ubuntu y distribuciones similares.