Búsqueda de sitios web

Todo lo que necesita saber sobre procesos en Linux [Guía completa]


En este artículo, analizaremos una comprensión básica de los procesos y veremos brevemente cómo administrar procesos en Linux usando ciertos comandos.

Un proceso se refiere a un programa en ejecución; es una instancia en ejecución de un programa. Se compone de instrucciones del programa, datos leídos de archivos, otros programas o entradas de un usuario del sistema.

Tipos de procesos

Existen fundamentalmente dos tipos de procesos en Linux:

  • Procesos en primer plano (también conocidos como procesos interactivos): se inicializan y controlan a través de una sesión de terminal. En otras palabras, tiene que haber un usuario conectado al sistema para iniciar dichos procesos; no se han iniciado automáticamente como parte de las funciones/servicios del sistema.
  • Procesos en segundo plano (también conocidos como procesos no interactivos/automáticos): son procesos que no están conectados a una terminal; no esperan ninguna aportación del usuario.

¿Qué son los demonios?

Estos son tipos especiales de procesos en segundo plano que comienzan al iniciar el sistema y continúan ejecutándose para siempre como un servicio; no mueren. Se inician como tareas del sistema (se ejecutan como servicios), de forma espontánea. Sin embargo, un usuario puede controlarlos mediante el proceso de inicio.

Creación de procesos en Linux.

Normalmente se crea un nuevo proceso cuando un proceso existente hace una copia exacta de sí mismo en la memoria. El proceso hijo tendrá el mismo entorno que su padre, pero sólo el número de identificación del proceso es diferente.

Hay dos formas convencionales que se utilizan para crear un nuevo proceso en Linux:

  • Usar la función System(): este método es relativamente simple, sin embargo, es ineficiente y tiene riesgos de seguridad significativos.
  • Uso de las funciones fork() y exec(): esta técnica es un poco avanzada pero ofrece mayor flexibilidad, velocidad y seguridad.

¿Cómo identifica Linux los procesos?

Debido a que Linux es un sistema multiusuario, lo que significa que diferentes usuarios pueden ejecutar varios programas en el sistema, cada instancia en ejecución de un programa debe ser identificada de forma única por el kernel.

Y un programa se identifica por su ID de proceso (PID), así como por su ID de proceso principal (PPID), por lo tanto, los procesos se pueden clasificar en:

  • Procesos principales: son procesos que crean otros procesos durante el tiempo de ejecución.
  • Procesos secundarios: estos procesos son creados por otros procesos durante el tiempo de ejecución.

El proceso inicial

El proceso Init es la madre (padre) de todos los procesos del sistema, es el primer programa que se ejecuta cuando se inicia el sistema Linux; gestiona todos los demás procesos del sistema. Lo inicia el propio núcleo, por lo que en principio no tiene un proceso padre.

El proceso de inicio siempre tiene un ID de proceso de 1. Funciona como padre adoptivo para todos los procesos huérfanos.

Puede utilizar el comando pidof para encontrar el ID de un proceso:

pidof systemd
pidof top
pidof httpd

Para encontrar el ID del proceso y el ID del proceso principal del shell actual, ejecute:

echo $$
echo $PPID

Iniciar un proceso en Linux

Una vez que ejecute un comando o programa (por ejemplo, cloudcmd – CloudCommander), iniciará un proceso en el sistema. Puede iniciar un proceso en primer plano (interactivo) de la siguiente manera, se conectará al terminal y un usuario podrá enviarle información:

cloudcmd

Trabajos en segundo plano de Linux

Para iniciar un proceso en segundo plano (no interactivo), use el símbolo &; aquí, el proceso no lee la entrada de un usuario hasta que se mueve al primer plano.

cloudcmd &
jobs

También puedes enviar un proceso a segundo plano suspensándolo usando [Ctrl + Z], esto enviará la señal SIGSTOP al proceso, deteniendo así sus operaciones; queda inactivo:

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

Para continuar ejecutando el comando suspendido anteriormente en segundo plano, use el comando bg:

bg

Para enviar un proceso en segundo plano al primer plano, use el comando fg junto con el ID del trabajo de esta manera:

jobs
fg %1

También te puede interesar: Cómo iniciar el comando de Linux en segundo plano y desconectar el proceso en la terminal

Estados de un proceso en Linux

Durante la ejecución, un proceso cambia de un estado a otro dependiendo de su entorno/circunstancias. En Linux, un proceso tiene los siguientes estados posibles:

  • En ejecución: aquí se está ejecutando (es el proceso actual en el sistema) o está listo para ejecutarse (está esperando ser asignado a una de las CPU).
  • En espera: en este estado, un proceso está esperando que ocurra un evento o un recurso del sistema. Además, el kernel también diferencia entre dos tipos de procesos de espera; Los procesos de espera interrumpibles (pueden ser interrumpidos por señales y los procesos de espera ininterrumpibles) están esperando directamente en las condiciones del hardware y no pueden ser interrumpidos por ningún evento/señal.
  • Detenido: en este estado, un proceso se ha detenido, generalmente al recibir una señal. Por ejemplo, un proceso que se está depurando.
  • Zombie: aquí, un proceso está muerto, se ha detenido pero todavía tiene una entrada en la tabla de procesos.

Cómo ver procesos activos en Linux

Existen varias herramientas de Linux para ver/enumerar los procesos en ejecución en el sistema, los dos tradicionales y más conocidos son los comandos ps y top:

1. comando ps

Muestra información sobre una selección de los procesos activos en el sistema como se muestra a continuación:

ps 
ps -e | head 

2. arriba – Herramienta de monitoreo del sistema

top es una poderosa herramienta que le ofrece una vista dinámica en tiempo real de un sistema en ejecución, como se muestra en la siguiente captura de pantalla:

top 

Lea esto para ver más ejemplos de uso principales: 12 ejemplos de comandos PRINCIPALES en Linux

3. miradas – Herramienta de monitoreo del sistema

glances es una herramienta de monitoreo del sistema relativamente nueva con funciones avanzadas:

glances

Para obtener una guía de uso completa, lea: Glances: una herramienta avanzada de monitoreo de sistemas en tiempo real para Linux

Hay varias otras herramientas útiles de monitoreo del sistema Linux que puede usar para enumerar los procesos activos; abra el enlace a continuación para leer más sobre ellos:

  1. 20 herramientas de línea de comandos para monitorear el rendimiento de Linux
  2. 13 herramientas de monitoreo de Linux más útiles

Cómo controlar procesos en Linux

Linux también tiene algunos comandos para controlar procesos como kill, pkill, pgrep y killall, a continuación se muestran algunos ejemplos básicos de cómo usarlos:

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

Para aprender cómo usar estos comandos en profundidad, para matar/terminar procesos activos en Linux, abra los enlaces a continuación:

  1. Una guía de los comandos Kill, Pkill y Killall para finalizar el proceso de Linux
  2. Cómo encontrar y eliminar procesos en ejecución en Linux

Tenga en cuenta que puede usarlos para eliminar aplicaciones que no responden en Linux cuando su sistema se congela.

Envío de señales a procesos

La forma fundamental de controlar los procesos en Linux es enviándoles señales. Hay múltiples señales que puede enviar a un proceso, para ver todas las señales ejecutadas:

kill -l

Para enviar una señal a un proceso, use los comandos kill, pkill o pgrep que mencionamos anteriormente. Pero los programas sólo pueden responder a las señales si están programados para reconocerlas.

Y la mayoría de las señales son para uso interno del sistema o para los programadores cuando escriben código. Las siguientes son señales que son útiles para un usuario del sistema:

  • SIGHUP 1: enviado a un proceso cuando su terminal de control está cerrado.
  • SIGINT 2: enviado a un proceso por su terminal de control cuando un usuario interrumpe el proceso presionando [Ctrl+C].
  • SIGQUIT 3: enviado a un proceso si el usuario envía una señal de salida [Ctrl+D].
  • SIGKILL 9: esta señal termina (mata) inmediatamente un proceso y el proceso no realizará ninguna operación de limpieza.
  • SIGTERM 15: esta es una señal de finalización del programa (kill la enviará de forma predeterminada).
  • SIGTSTP 20: enviado a un proceso por su terminal de control para solicitarle que se detenga (parada del terminal); iniciado por el usuario presionando [Ctrl+Z].

Los siguientes son ejemplos de comandos de eliminación para finalizar la aplicación Firefox usando su PID una vez que se congela:

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

Para cerrar una aplicación usando su nombre, use pkill o killall así:

pkill firefox
killall firefox 

Cambiar la prioridad del proceso de Linux

En el sistema Linux, todos los procesos activos tienen una prioridad y un valor determinado. Los procesos con mayor prioridad normalmente obtendrán más tiempo de CPU que los procesos de menor prioridad.

Sin embargo, un usuario del sistema con privilegios de root puede influir en esto con los comandos nice y renice.

Desde la salida del comando superior, el NI muestra el valor agradable del proceso:

top  

Utilice el comando nice para establecer un valor agradable para un proceso. Tenga en cuenta que los usuarios normales pueden atribuir un buen valor de cero a 20 a los procesos que poseen.
Sólo el usuario root puede utilizar valores agradables negativos.

Para renice la prioridad de un proceso, utilice el comando renice de la siguiente manera:

renice +8  2687
renice +8  2103

Consulte nuestros artículos útiles sobre cómo administrar y controlar los procesos de Linux.

  1. Gestión de procesos de Linux: arranque, apagado y todo lo demás
  2. Encuentre los 15 procesos principales por uso de memoria con "top" en modo por lotes
  3. Encuentre los principales procesos en ejecución según el mayor uso de memoria y CPU en Linux
  4. Cómo encontrar un nombre de proceso usando el número PID en Linux

¡Eso es todo por ahora! ¿Tiene alguna pregunta o idea adicional? Compártala con nosotros a través del formulario de comentarios a continuación.