Я пишу библиотеку, которая использует fork()
и exec()
для запуска внешних программ.Код в моей библиотеке работает как отдельный поток.Поток библиотеки должен waitpid()
на разветвленном процессе знать код завершения дочернего процесса.
К сожалению, если приложение, использующее мою библиотеку, зарегистрирует обработчик сигнала для SIGCHLD
, вызовы waitpid()
вернутсяс ошибкой ECHILD
.
Как мне справиться с этим как с библиотекой, при которой приложение оказывает минимальное влияние?По сути, я хочу, чтобы ребенок оставался зомби и контролировал, когда его пожинают.
Могу ли я изолировать себя от того, что приложение решает делать?Могу ли я каким-то образом перехватить обработчик сигнала и вернуть его после того, как мой waitpid
будет сделан?