Creación de procesos
100%

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.

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.

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:

  1. El shell crea un hijo.
  2. El hijo prepara redirecciones y otro estado de ejecución.
  3. El hijo ejecuta el programa solicitado.
  4. 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?

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
Siguiente Lección
Volver a Procesos