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?
signalfd
czy 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.