Los procesos de Linux forman relaciones entre padres e hijos. Un shell suele iniciar una orden externa creando un proceso hijo y haciendo que este ejecute el programa solicitado. La explicación clásica separa este trabajo en operaciones fork y exec.
Procesos · Lección 4
Creación de procesos
Aprende cómo fork, exec, los PID y las relaciones de parentesco intervienen en la creación de procesos de Linux.
Crear un hijo con `fork`
La llamada al sistema fork() crea un proceso hijo basado en el proceso que la invoca. Padre e hijo continúan desde el punto de retorno de fork, pero reciben valores de retorno distintos y tienen PID diferentes.
El hijo obtiene un estado de proceso lógicamente independiente. Linux puede compartir inicialmente páginas de memoria física mediante copia en escritura y copiar una página únicamente cuando uno de los procesos la modifica. Los descriptores de archivos abiertos se heredan y se refieren a las mismas descripciones de archivos abiertas subyacentes, por lo que detalles como los desplazamientos pueden seguir compartidos.
¿Qué crea un fork() correcto?
Sustituir un programa con `execve`
Una llamada execve() carga un programa nuevo en el proceso que la invoca. Si tiene éxito, sustituye la imagen del proceso y no vuelve al programa anterior. El PID permanece igual porque execve() no crea un proceso nuevo.
Por tanto, muchas órdenes del shell siguen un patrón fork-exec:
- El shell crea un hijo.
- El hijo prepara redirecciones y otro estado de ejecución.
- El hijo ejecuta el programa solicitado.
- El shell espera o continúa, según se ejecute en primer o segundo plano.
Las bibliotecas y aplicaciones pueden ofrecer interfaces de nivel superior como posix_spawn(), y Linux tiene primitivas adicionales como clone(). El conocido modelo fork-exec sigue siendo útil sin ser la única interfaz posible.
¿Qué ocurre con el PID de un proceso después de un execve() correcto?
Consultar los ID de padres e hijos
PID identifica el proceso, mientras que PPID identifica a su padre. Solicita esos campos explícitamente:
$ ps -o pid,ppid,stat,cmd
Si un shell inicia ps, el PID del shell suele aparecer como PPID de ese proceso ps. El momento importa: los procesos de corta duración pueden terminar antes de que otra observación consiga capturarlos.
¿Qué representa PPID en un listado de procesos?
PID 1 y reasignación de padre
El kernel inicia el primer proceso del espacio de usuario con PID 1. Según el sistema, puede ser systemd, otra implementación de init o un init pequeño dentro de un contenedor o espacio de nombres PID. PID 1 inicia y supervisa partes del entorno de espacio de usuario y tiene responsabilidades especiales sobre señales y recogida de procesos huérfanos.
Cuando un padre termina antes que su hijo, este se reasigna a un subreaper apropiado o al proceso init de su espacio de nombres PID. No necesita terminar simplemente porque haya finalizado su padre original.
¿Qué afirmación sobre PID 1 es correcta?
El laboratorio Gestionar y supervisar procesos de Linux permite observar los ID de padres e hijos al ejecutar órdenes en primer y segundo plano.
Lección completada
Has completado Creación de procesos
Ahora puedes seguir la secuencia clásica de creación de procesos de Linux.
Usa
fork()para crear un hijo con un PID distinto.Usa
execve()para sustituir la imagen de un proceso sin cambiar su PID.Lee PID y PPID para identificar relaciones entre padres e hijos.
Reconoce PID 1 y los subreapers como destinos de hijos reasignados.
Guarda tu progreso
Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.
Crear una cuenta gratuita