¿Qué hacer si la función del sistema se bloquea?
Se trata de un problema de sincronización entre procesos. La solución es: bifurcar un proceso hijo para ejecutar la llamada al sistema y el proceso padre llama a esperar o esperarpid para esperar la información de terminación del proceso hijo.
Cuando un proceso padre llama a wait o waitpid, puede: bloquearse (si todos sus procesos hijos todavía se están ejecutando). Regresa inmediatamente con la información de terminación del proceso hijo (si un proceso hijo ha terminado, está esperando que el proceso padre lea su información de terminación). Devuelve inmediatamente en caso de error (si no tiene ningún proceso secundario).
La diferencia entre las dos funciones esperar y esperarpid es: si todos los procesos secundarios del proceso principal aún se están ejecutando, llamar a esperar hará que el proceso principal se bloquee, pero al llamar a esperarpid, si especifica WNOHANG en el parámetro de opciones, puede hacer que el proceso principal devuelva 0 inmediatamente sin bloquearse. wait espera el primer proceso hijo terminado, y waitpid puede especificar qué proceso hijo esperar a través del parámetro pid.