Как процесс узнать, какой ребенок закончился?
Когда дочерний процесс завершается, он отправляет SIGCHLD
в родительский процесс. Теперь, если родительский процесс имеет более одного дочернего процесса, откуда родительский процесс знает, какой дочерний процесс отправил сигнал?
2 ответа
В добавок к wait()
Семейство звонков, как в ответе @shanet, сам SIGCHLD несет эту информацию.
si_pid
членsiginfo_t
элемент, переданный обработчику сигнала с тремя аргументами ( SA_SIGINFO), содержит PID дочернего элемента.
wait()
системный вызов возвращает pid
ребенка, который прекратил. Ты можешь позвонить wait()
в вашем SIGCHLD
обработчик, чтобы определить, какой дочерний элемент прекращен.
Со страницы руководства:
wait(): on success, returns the process ID of the terminated child;
on error, -1 is returned.