Как процесс узнать, какой ребенок закончился?

Когда дочерний процесс завершается, он отправляет 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.
Другие вопросы по тегам