Na swojej stronie internetowej o tej sztuczki self-pipe , Dan Bernstein wyjaśnia warunek wyścigu select()i sygnałów, oferuje obejście i stwierdza, że
Oczywiście właściwą rzeczą byłoby
fork()zwrócenie deskryptora pliku, a nie identyfikatora procesu.
Co on przez to rozumie - czy jest to coś w tym, że select()w procesach potomnych można radzić sobie ze zmianami stanu zamiast korzystać z procedury obsługi sygnałów, aby otrzymywać powiadomienia o tych zmianach stanu?
signalfdczy wtedy coś takiego było?
wait(), były rzeczy, których nie można było zrobić, więc ktoś wymyślił SIGCHLD, ale to była zła robota. Z mojego doświadczenia, a teraz, że one istnieją, zraszanie ładne, powodują blokowania wait3(), wait4()i / lub waitpid()połączeń w kluczowych miejscach (chyba głównym pętla zdarzenie) jest znacznie lepsza alternatywa.