Вместо ожидания определенного PID вы можете дождаться любого PID несколькими способами. Вы можете установить обработчик сигнала для SIGCHLD и в вызове обработчика wait(&status)
, и он вернет PID и сохранит статус выхода процесса.
Или вы можете установить обработчик сигнала, используя sigaction
и SA_SIGINFO
флаг. Тогда обработчик сигнала будет иметь расширенную подпись, которая включает параметр siginfo_t*
, а для сигнала SIG_CHLD он будет содержать PID и статус.
Или вместо обработчика сигнала вы можете использовать wait
или waitpid
(с PID -1) для ожидания любого процесса, и он вернет PID того, какой из них завершился. Предполагая, что ваша программа отслеживает, сколько дочерних элементов она разветвлена, вы должны обработать этот выход процесса и go вернуться к ожиданию того, что будет дальше.
Ожидание любого выхода важно, если в вашей оболочке есть управление заданиями, которое позволяет запуск и отслеживание состояния любого количества фоновых процессов.