Esta lección explora los conceptos fundamentales de cómo se inician nuevos procesos en un sistema Linux. Comprender este mecanismo proporciona una visión del funcionamiento interno del sistema operativo.
El Modelo Fork y Exec
El mecanismo principal para la creación de procesos en Linux implica que un proceso existente se clona a sí mismo utilizando la llamada al sistema fork. La llamada fork crea un proceso hijo casi idéntico. Este nuevo proceso hijo recibe su propio Identificador de Proceso (PID) único, mientras que el proceso original se convierte en su padre, identificado por un Identificador de Proceso Padre (PPID).
Después de bifurcarse (forking), el proceso hijo puede continuar ejecutando el mismo programa que su padre o, más comúnmente, usar la llamada al sistema execve para cargar y ejecutar un nuevo programa. La llamada execve reemplaza efectivamente el espacio de memoria del proceso con el del nuevo programa, permitiendo que comience una tarea diferente. Este modelo de dos pasos "fork-exec" es una piedra angular de cómo se crea un proceso en Linux.
Observando las Relaciones Padre-Hijo
Podemos observar esta relación padre-hijo en acción usando el comando ps:
ps l
La opción l proporciona una vista de "formato largo", mostrando más detalles sobre los procesos en ejecución. Verá una columna etiquetada como PPID, que significa Parent Process ID (Identificador de Proceso Padre). Observe el proceso de su shell actual (por ejemplo, bash). Cuando ejecuta el comando ps l, notará que el PID de su proceso shell coincide con el PPID del proceso ps l. Esto se debe a que su shell se bifurcó para crear el proceso ps.
El Proceso Init
Si cada proceso es hijo de otro, debe haber un ancestro original. Este es el proceso init. Cuando el sistema arranca, el kernel crea init como el primer proceso de espacio de usuario, asignándole un PID de 1. El proceso init es el padre definitivo de todos los demás procesos y se ejecuta con privilegios de root para administrar el sistema. No se puede terminar hasta que el sistema se apague y es responsable de iniciar muchos de los servicios que mantienen el sistema en funcionamiento.