подпроцесс: удаление дочерних процессов в Windows

Какая среда?

В.NET я обычно создаю пустой файл класса, переименовываю ее к MyEnum или безотносительно указать, что она содержит мое перечисление, и просто объявите его там.

38
задан Piotr Dobrogost 22 October 2012 в 10:05
поделиться

2 ответа

Это непростая задача. Windows фактически не хранит дерево процессов в пространстве процессов. Также невозможно завершить процесс и указать, что его дочерние элементы также должны умереть.

Один из способов обойти это - использовать taskkill и сказать ему, чтобы он разбудил все дерево.

Другой способ сделать это (при условии, что вы порождение процесса верхнего уровня) заключается в использовании модуля, который был разработан с учетом такого рода вещей: http://benjamin.smedbergs.us/blog/tag/killableprocess/

Для этого как правило, вы должны потратить некоторое время на построение списка в обратном порядке. То есть процесс хранит указатели на свой PARENT, но кажется, что родители не хранят информацию о потомках.

Итак, вы должны посмотреть на все процессы в системе (что на самом деле не так уж и сложно), а затем вручную соедините точки самостоятельно, посмотрев на поле родительского процесса. Затем вы выбираете интересующее вас дерево и проходите его, убивая каждый узел по очереди, один за другим.

Обратите внимание, что Windows не обновляет родительский указатель дочернего элемента, когда родитель умирает, поэтому могут быть пробелы в вашем дереве. Я не знаю, что вы можете с этим сделать.

8
ответ дан 27 November 2019 в 03:06
поделиться

Поместите детей в объект NT Job , тогда вы можете убить всех детей

6
ответ дан 27 November 2019 в 03:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: