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?