Здравствуйте. Меня интересует есть ли в винде такая функциональность, чтобы при смерти родительского процесса порождённые им дочерние убивались автоматически. Понятно, что эту функциональность можно реализовать - открывать в дочернем процессе родительский и ждать сигнал от него. Но может есть уже готовая функциональность (н-р параметры CreateProcess)?
Процесс родитель должен быть отладчиком. Сервисы запускающие процессы требуют опционально в аргументах описатель отладочного порта. Как решать - трассировать апи и изменять параметры сервиса при вызове стаба или шлюза(ожидаемый вопрос). Это динамически. Но можно и переключить поток на отморфленный код.
onSide При завершении ждущего потока, обьект на котором происходит ожидание не будет уничтожен - он вообще ничего не узает про это.
Не нравится то, что в дочернем процессе нужно дополнительный поток создавать (практически бесполезный).
srm Ожидание на обьекте имеет таймаут. Более того, допустим синхронный выход из ожидания ждущего треда - APC. Короче учите матчасть, иначе описывать придётся всю ось.
klzlk да, но ведь по тз родительский поток не должен завершаться при смерти дочернего. либо если у вас корректное завершение родителя то можете на выходе просто перебирать дочерние процессы и делать им терминейт, либо создайте отдельный процесс который будет следить, тут вопрос фантазии, ну или через дебаг порт как уже сказали..
1. Создать job - CreateJobObject 2. Добавить нужные процессы к job - AssignProcessToJobObject 3. Убить job - TerminateJobObject. Все ассоциированные процессы также будут убиты.
Это необязательно. Есть флаг JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE: Т.е. создаём Job, но не закрываем хендл. При завершении процесса хендл будет закрыт автоматически. Соответственно, все связанные процессы в Job-е будут автоматически убиты.
WaitForMultipleObjects можно запускать в цикле и проверять код возврата. Может прекратите давать нелепые ответы? Задача вполне ясна. нет. это понятно. Кто будет вызывать TerminateJobObject? Откуда дочерний процесс узнает о смерти родительского? А родительский при своём завершении вызвать не может, т.к. может завершиться некорректно. x64, спасибо за совет. Работает именно так, как и требовалось ) P.S. Можно закрывать.