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