Citar¿pero si se quita sigue funcionando el programa igualmente?
Por supuesto, pero se utiliza para dar un margen mínimo de tiempo. Es simplemente una precaución que no debería molestar al menos que el caso amerite ahorrar tiempo de donde sea.
CitarCódigo (c) [Seleccionar]waitreturn = wait (&status);
while ( (waitreturn !=-1) || (waitreturn == -1 && errno == EINTR))
waitreturn = wait (&status);
Wait retorna el pid del hijo que termine. Luego dice que retorna 0 ¿si no retorna ninguno y ninguno esta disponible? No se que quiere decir eso... y luego -1 si hay error.
¿esta esperando procesos hijos hasta que wait retorne -1 y errno != EINTR? ¿por que?
wait suspende la ejecución del proceso actual en pos de esperar que un hijo finalice, una señal sea entregada, o se decida finalizar el proceso actual.
En este caso estas interpretando mal el código, el significado seria:
Mientras wait no retorne error O (wait retorne error Y errno este establecido como EINTR)
Tal que EINTR establecido implica:
CitarEINTR
if WNOHANG was not set and an unblocked signal or a SIGCHLD was caught.
CitarEl otro tampoco lo entiendo... ¿childpid que toma 0 o 1 y lo compara con el wait?
Bueno a ver si puedes aclarar esto
childpid==0 equivale a decir "Soy un proceso hijo". Mientras childpid != wait.
Relaciona eso con el valor de retorno de wait:
Citar
The process ID of the child which exited, or zero if WNOHANG was used and no child was available, or -1 on error (in which case errno is set to an appropriate value).
Saludos