En su página web sobre el truco del self-pipe , Dan Bernstein explica una condición de carrera select()
e indica, ofrece una solución y concluye que
Por supuesto, lo correcto sería
fork()
devolver un descriptor de archivo, no un ID de proceso.
¿Qué quiere decir con esto? ¿Tiene algo que ver select()
con los procesos secundarios para manejar sus cambios de estado en lugar de tener que usar un controlador de señal para recibir notificaciones de esos cambios de estado?
signalfd
algo así fuera en ese entonces.
wait()
, había cosas que no podías hacer, así que alguien inventó SIGCHLD, pero fue un mal trabajo. En mi experiencia, y ahora que existen, aspersión agradable, sin bloqueo wait3()
, wait4()
y / o waitpid()
llamadas en lugares clave (tal vez su bucle de eventos principal) es una alternativa muy superior.