Linux: obsługa systemu () + SIGCHLD + wielowątkowość

Mam aplikację wielowątkową, która instaluje moduł obsługi SIGCHLD, który rejestruje i zbiera procesy potomne.
Problem, który widzę, zaczyna się, gdy dzwonię dosystem(). system() musi czekać na zakończenie procesu potomnego i zbierać go, ponieważ potrzebuje kodu wyjścia. Dlatego dzwonisigprocmask() zablokować SIGCHLD. Ale w mojej aplikacji wielowątkowej SIGCHLD nadal jest wywoływany w innym wątku, a dziecko jest wcześniej zbieranesystem() ma szansę to zrobić.

Czy jest to znany problem w POSIX?

Pomyślałem o tym, aby zablokować SIGCHLD we wszystkich innych wątkach, ale w moim przypadku nie jest to realne, ponieważ nie wszystkie wątki są tworzone bezpośrednio przez mój kod.
Jakie mam inne opcje?

questionAnswers(4)

yourAnswerToTheQuestion