Как отслеживать, какие дочерние процессы убиты в c ++

Пишу сервер. Он использует fork() для создания новых дочерних процессов. Я хочу убить дочерние процессы, когда родительский процесс умирает. Я планирую использовать массив для хранения идентификаторов дочерних процессов, но есть вероятность, что дочерний процесс может завершиться раньше, чем родительский процесс. В этом случае, если мы вызовем kill функцию, используя SIGKILL и pid дочернего процесса, который уже завершился, выдаст ли он исключение?


person cmm user    schedule 27.02.2016    source источник
comment
@ n.m Спасибо за ответ. Системный вызов wait () приостанавливает выполнение вызывающего процесса до завершения одного из его дочерних процессов. Но я не хочу, чтобы выполнение вызывающего процесса ожидало завершения дочернего процесса.   -  person cmm user    schedule 27.02.2016
comment
Прочтите внимательнее, обратите внимание на WNOHANG.   -  person n. 1.8e9-where's-my-share m.    schedule 27.02.2016


Ответы (1)


Когда дочерний процесс завершается, родительскому процессу отправляется сигнал SIGCHLD. Вы можете обработать этот сигнал в родительском элементе, чтобы проверить, какой дочерний элемент завершился сам по себе, прежде чем у вас будет возможность wait для него. И вы должны wait() для всех детей, чтобы избежать зомби-процессов.

Вы также можете взглянуть на этот поток, чтобы узнать об альтернативном способе завершения работы дочерних элементов, когда завершается родительский: Как заставить дочерний процесс умирать после выхода из родительского?

person Ionut    schedule 27.02.2016