Wait
Parar procesos
Last updated
Parar procesos
Last updated
Cuando un proceso crea un proceso secundario, a veces es necesario que el proceso principal se ejecute solo después de que el secundario haya terminado. La llamada al sistema wait() hace exactamente esto. Hace que el proceso principal espere a que finalice el proceso secundario y luego el padre continúa trabajando desde la declaración después de la wait().
Para ser exactos, esperar hace que el padre espere a que el hijo cambie de estado. El cambio de estado puede ser:
el hijo ha terminado
el hijo fue detenido por una señal
el hijo fue retomado por una señal
La llamada al sistema wait() toma solo un parámetro que almacena la información de estado del proceso. Pase NULL como valor si no desea conocer el estado de salida del proceso hijo y simplemente le preocupa hacer que el padre espere al hijo. En caso de éxito, la espera devuelve el PID del proceso secundario finalizado, mientras que en caso de error devuelve -1.
Se puede usar wait() para hacer que el padre espere a que el hijo termine (finalice) pero no al revés. wait devuelve el PID del proceso hijo terminado mientras que, en caso de falla, devuelve -1.
La información de estado sobre el hijo reportada por wait es más que solo el estado de salida del niño, también incluye:
terminación normal/anormal
causa de terminación
estado del exit (salida)
Para encontras mas iformacion sobre el estado del hijo se utilizan las macros WIF
output:
La ejecución comienza imprimiendo “antes del tenedor”. Luego, la llamada al sistema fork() crea un proceso secundario.
La llamada al sistema wait() se agrega a la sección principal del código. Por lo tanto, en el momento en que el procesador comienza a procesar al padre, el proceso principal se suspende porque la primera declaración es esperar (NULL). Por lo tanto, primero, se ejecuta el proceso secundario y todas las líneas de salida corresponden al proceso secundario. Una vez que finaliza el proceso secundario, el padre reanuda e imprime todas sus instrucciones printf(). El NULL dentro de wait() significa que no estamos interesados en conocer el estado de cambio de estado del proceso secundario.
Macro | Descripcion |
---|---|
WIFEXITED(status)
El hijo se ejecuto con normalidad
WEXITSTATUS(status)
reterna codigo cuando el hijo existe
WIFSIGNALED(status)
El hijo salió porque no se captó una seña
WTERMSIG(status)
da el número de la señal de terminación
WIFSTOPPED(status)
El hijo ha sido detenido
WSTOPSIG(status)
da el número de la señal de parada