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


En este artículo, veremos una comprensión básica de los procesos y veremos brevemente cómo administrar los 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. Está compuesto por la instrucción del programa, los datos leídos de archivos, otros programas o la entrada de un usuario del sistema.

Hay fundamentalmente dos tipos de procesos en Linux:

  • Foreground processes (also referred to as interactive processes) – these are initialized and controlled through a terminal session. In other words, there has to be a user connected to the system to start such processes; they haven’t started automatically as part of the system functions/services.
  • Background processes (also referred to as non-interactive/automatic processes) – are processes not connected to a terminal; they don’t expect any user input.

Estos son tipos especiales de procesos en segundo plano que se inician en el inicio del sistema y se siguen ejecutando para siempre como un servicio; ellos no mueren Se inician como tareas del sistema (ejecutarse como servicios), espontáneamente. Sin embargo, pueden ser controlados por un usuario a través del proceso de inicio.

Creación de un proceso en Linux

Un proceso nuevo normalmente se crea 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 solo el número de ID del proceso es diferente.

Hay dos formas convencionales utilizadas para crear un nuevo proceso en Linux:

  • Using The System() Function – this method is relatively simple, however, it’s inefficient and has significantly certain security risks.
  • Using fork() and exec() Function – this technique is a little advanced but offers greater flexibility, speed, together with security.

¿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 núcleo.

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

  • Parent processes – these are processes that create other processes during run-time.
  • Child processes – these processes are created by other processes during run-time.

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

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

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

# pidof systemd
# pidof top
# pidof httpd

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

$ echo $$
$ echo $PPID

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

# cloudcmd

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

# cloudcmd &
# jobs

También puede enviar un proceso al fondo suspendiéndolo usando [Ctrl + Z] , esto enviará la señal SIGSTOP al proceso, deteniendo sus operaciones; se vuelve 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 la ID del trabajo, de este modo:

# jobs
# fg %1

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

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:

  • Running – here it’s either running (it is the current process in the system) or it’s ready to run (it’s waiting to be assigned to one of the CPUs).
  • Waiting – in this state, a process is waiting for an event to occur or for a system resource. Additionally, the kernel also differentiates between two types of waiting processes; interruptible waiting processes – can be interrupted by signals and uninterruptible waiting processes – are waiting directly on hardware conditions and cannot be interrupted by any event/signal.
  • Stopped – in this state, a process has been stopped, usually by receiving a signal. For instance, a process that is being debugged.
  • Zombie – here, a process is dead, it has been halted but it’s still has an entry in the process table.

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

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

# ps 
# ps -e | head 

top es una herramienta poderosa 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 superior: 12 ejemplos de comandos TOP en Linux

miradas es una herramienta de monitoreo del sistema relativamente nueva con características avanzadas:

# glances

Para una guía de uso completa, lea: Miradas: una herramienta avanzada de monitoreo del sistema en tiempo real para Linux

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

  1. 20 Command Line Tools to Monitor Linux Performance
  2. 13 More Useful Linux Monitoring Tools

Cómo controlar los 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 a usar estos comandos en profundidad, para eliminar/finalizar procesos activos en Linux, abra los enlaces a continuación:

  1. A Guide to Kill, Pkill and Killall Commands to Terminate Linux Processess
  2. How to Find and Kill Running Processes in Linux

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

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

$ kill -l

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

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

  • SIGHUP 1 – sent to a process when its controlling terminal is closed.
  • SIGINT 2 – sent to a process by its controlling terminal when a user interrupts the process by pressing [Ctrl+C].
  • SIGQUIT 3 – sent to a process if the user sends a quit signal [Ctrl+D].
  • SIGKILL 9 – this signal immediately terminates (kills) a process and the process will not perform any clean-up operations.
  • SIGTERM 15 – this a program termination signal (kill will send this by default).
  • SIGTSTP 20 – sent to a process by its controlling terminal to request it to stop (terminal stop); initiated by the user pressing [Ctrl+Z].

Los siguientes son ejemplos de comandos kill para matar 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 matar una aplicación usando su nombre, usa pkill o killall así:

$ pkill firefox
$ killall firefox 

En el sistema Linux, todos los procesos activos tienen una prioridad y cierto valor agradable. 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 de proceso agradable:

$ top  

Solo el usuario root puede usar valores agradables negativos.

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

$ renice +8  2687
$ renice +8  2103

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

  1. Linux Process Management: Boot, Shutdown, and Everything in Between
  2. Find Top 15 Processes by Memory Usage with ‘top’ in Batch Mode
  3. Find Top Running Processes by Highest Memory and CPU Usage in Linux
  4. How to Find a Process Name Using PID Number in Linux

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