я прыгать прямо, чтобы быть кратким и описательным:Прекратить все (Grand) детей при завершении дочернего процесса
C++, Windows API
Я создаю дочерние процессы с помощью CreateProcess
для запуска внешних (команда -лайн). Я построил тайм-аут, и если к этому времени дочерний процесс не вернулся к нормальному исполнению, я хочу принудительно завершить этот дочерний процесс.
В идеале я хотел бы, чтобы этот процесс ребенка действовать так же, как если бы он назвал ExitProcess
, или как будто в Ctrl+C
был направлен на свою консоль (которая вызывает ExitProcess
из обработчика управления консоли по умолчанию).
Мое решение до сих пор использовало TerminateProcess
, чтобы убить ребенка силой. Это заставляет ребенка немедленно прекратить свое существование, но, к сожалению, если этот ребенок породил всех своих детей, им остается работать до их «естественного» завершения.
Есть ли способ рассказать дочернему процессу о вызове ExitProcess
или заставить всех детей ребенка также прекратить работу при вызове TerminateProcess
?
Эти внешние приложения не поддаются моему контролю, и поэтому я не могу их модифицировать, чтобы обеспечить пользовательскую работу.
Предположим, что не было знаний о процессах с большими дочерними процессами (имена/pids/etc), которые позволили бы мне вручную вызвать TerminateProcess
по процессам grand-child отдельно. Хотя это можно было бы сделать вручную, перечислив все процессы, сопоставляя процессы процессов и отслеживая все процессы, я не считаю это допустимым решением, кроме как в крайнем случае.
Спасибо за ваше время.
Спасибо, Майкл. Это очень перспективно и выглядит так, как будто он отлично решает эту проблему. Теперь идите читать дальше и дайте ему шанс! Благодарим вас за то, что вы делитесь своими знаниями и опытом. – KevenK
Объекты работы больше не работают с Vista. Проводник запускает программы из ярлыка в задании, не позволяя вам делать то же самое с любыми дочерними процессами. –
Я не мог воспроизвести это поведение в своем окне Win7 - я написал небольшую программу, которая создает задание и добавляет к ней. Прекрасно работает при запуске проводником через ярлык. – Michael