Cuando creamos un proceso en Linux, existen tres comandos comúnmente utilizados para lograr este objetivo fork
: exec
y wait
. Aquí hay una explicación detallada de estos tres comandos:
1. comando fork:fork
el comando se utiliza para crear un nuevo proceso. El nuevo proceso es una copia del proceso actual (proceso principal). Hereda el código, los datos, los descriptores de archivos, el contexto del proceso y otra información del proceso principal de el proceso padre. El nuevo proceso y el proceso padre ejecutan fork
el código que sigue al comando al mismo tiempo, por lo que pueden realizar diferentes operaciones en diferentes ramas.
fork
El comando no tiene parámetros y su sintaxis es la siguiente:
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
Después de llamar exitosamente fork
al comando, regresa dos veces: una vez en el proceso padre, devolviendo el PID (ID de proceso) del proceso hijo recién creado, y una vez en el proceso hijo, devolviendo 0. Devuelve -1 en caso de error.
2. comando exec:exec
el comando se utiliza para ejecutar un nuevo programa en el proceso actual. Cuando se llama al comando exec
, el código y los datos del proceso actual se reemplazan con el código y los datos del nuevo programa, pero información como el PID del proceso y el descriptor de archivo permanecen sin cambios. Esto permite iniciar un nuevo programa en el proceso actual sin crear un proceso completamente nuevo.
exec
Existen múltiples variantes del comando, como execl
, execv
, execle
, execve
etc., que pueden pasar información como parámetros de línea de comando y variables de entorno según las diferentes necesidades.
3. comando de espera:wait
el proceso principal utiliza el comando para esperar el final del proceso secundario. Cuando el proceso principal crea un proceso secundario, si desea continuar ejecutando el código del proceso principal después de que finalice el proceso secundario, puede usar el wait
comando. wait
El comando suspende el proceso principal hasta que finalice el proceso secundario. Si el proceso hijo ha terminado, wait
el comando regresa inmediatamente.
wait
El comando no tiene parámetros y su sintaxis es la siguiente:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
Entre ellos, status
el parámetro se usa para recibir el estado de terminación del proceso hijo, que se puede usar para determinar el estado de salida del proceso hijo.
En resumen, fork
el comando se usa para crear un nuevo proceso, exec
el comando se usa para ejecutar un nuevo programa en el proceso actual y wait
el comando se usa para que el proceso principal espere el final del proceso secundario. La combinación de estos tres comandos permite la gestión y el control de procesos complejos.