Dan Bernstein erklärt auf seiner Webseite über den Self-Pipe-Trick einen Race-Condition mit select()
und signalisiert, bietet einen Workaround an und schließt daraus
Das Richtige wäre natürlich,
fork()
einen Dateideskriptor zurückzugeben, keine Prozess-ID.
Was meint er damit select()
? Geht es darum, untergeordneten Prozessen die Möglichkeit zu geben , ihre Statusänderungen zu verarbeiten, anstatt einen Signalhandler zu verwenden, um über diese Statusänderungen informiert zu werden?
signalfd
so etwas gab?
wait()
, gab es Dinge, die Sie nicht tun konnten, also hat jemand SIGCHLD erfunden, aber es war ein schlechter Job. Nach meiner Erfahrung, und jetzt, wo sie existieren, Beregnung schön, nicht blockierend wait3()
, wait4()
und / oder waitpid()
Anrufe an wichtigen Stellen (vielleicht Ihre Hauptereignisschleife) ist eine weit überlegene Alternative.