Пишу сервер. Он использует fork()
для создания новых дочерних процессов. Я хочу убить дочерние процессы, когда родительский процесс умирает. Я планирую использовать массив для хранения идентификаторов дочерних процессов, но есть вероятность, что дочерний процесс может завершиться раньше, чем родительский процесс. В этом случае, если мы вызовем kill
функцию, используя SIGKILL
и pid дочернего процесса, который уже завершился, выдаст ли он исключение?
Как отслеживать, какие дочерние процессы убиты в c ++
Ответы (1)
Когда дочерний процесс завершается, родительскому процессу отправляется сигнал SIGCHLD
. Вы можете обработать этот сигнал в родительском элементе, чтобы проверить, какой дочерний элемент завершился сам по себе, прежде чем у вас будет возможность wait
для него. И вы должны wait()
для всех детей, чтобы избежать зомби-процессов.
Вы также можете взглянуть на этот поток, чтобы узнать об альтернативном способе завершения работы дочерних элементов, когда завершается родительский: Как заставить дочерний процесс умирать после выхода из родительского?
person
Ionut
schedule
27.02.2016
WNOHANG
. - person n. 1.8e9-where's-my-share m.   schedule 27.02.2016