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