Re[3]: Ожидание завершения процесса и его дочерних процессов
От: ononim  
Дата: 07.11.14 11:03
Оценка:
O>>Навскидку несколько решений, но все топорные:
O>>1) Метод влоб. Toolhelp'ом периодически перечислять все живые процессы, проверяя их парентов. Метод требует _не закрывания_ хэндла на процесс A до окончания всей спецоперации, в противном случае его PID может реюзнуться и выйдет конфуз.
X>Как вариант, но думал есть варианты попроще
У него есть и большой недостаток — если как вы ниже написали процессы B и C могут порождать правнуков, которых тоже нужно ждать — то этот вариант — не вариант.

O>>4) Проставить переменную окружения в себе. Ее отнаследуют все ваши дети и внуки (хотя могут и отказаться от "наследства" при желании). Периодически чекать процессы, роясь в их PEBах. По 5 балльной шкале злостного пользования недокументированным функционалом тянет балла на 2. Но потрахаться придеться.

X>По моему 1-й вариант проще
Зато этот сработает с правнутками.

O>>5) Запустить процесс А под дебагом. Ловить дебажные ивенты создания процессов. Советую в процессах первым делом подчищать флажок PEB::BeingDebugged (в wow64 процессах — в обоих PEBах). Иначе хип будет работать в особом, тормозном режиме.

X>Тоже не пойдет, т.к. в принципе процессы B и C тоже могут создать дочерние процессы. Задача состоит в том, чтоб отследить момент завершения создаваемого процесса и всех его внуков, если таковые будут.
Ну так — дебажить надобно всех.

O>>..подумаю, может еще чего добавлю, если конечно методы такого рода представляют интерес

X>Наверное можно еще сделать перехват CreateProcess и если эта функция вызывается в интересующем процессе, то передавать PID этого процесса ожидающей программе.
Сделать перехват, и сделать перехват, работающий стабильно на различных системах — это проблемы разных порядков. Особенно если это перехват CreateProcess'а.
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.