Вопрос: Как я могу определить все процессы в дереве процессов , чтобы убить их?Как завершить все дочерние процессы [grand] с использованием C# на WXP (и более поздних MSWindows)
У меня есть приложение, написанная на C#, который будет:
- Получить набор данных от сервера,
- икры третьей утилиты стороны обрабатывать данные, а затем
- Верните результаты на сервер.
Это прекрасно работает. Но так как пробег расходует много из CPU и может занять до тех пор, как час, я хочу добавить, чтобы мое приложение завершило его дочерние процессы.
Некоторые вопросы, которые делают простые решения, я нашел в других местах:
- моего приложения в дочерний процесс «A» (InstallAnywhere EXE я думаю) порождает реальную обработку приложение «B» (в Java. exe), который в свою очередь порождает больше детей «C1» .. «Cn» (большинство из них также написаны на Java).
- Скорее всего будет несколько экземпляров моего приложения (и, следовательно, нескольких наборов его дочерних элементов), работающих на одном компьютере.
- Детский процесс не контролируется, поэтому в будущем могут возникнуть некоторые процессы «D».
- Мое приложение должно работать на 32-битных и 64-разрядных версиях MSWindows.
На стороне плюса нет проблемы потери данных, «чистое» выключение не имеет значения, пока процессы заканчиваются довольно быстро.
В моем случае «B» может породить еще один «C», если я не убивал «B» первым , так что это не сработает, но это привело меня к правильному ответу. Мне нужно было получить список идентификаторов процессов и * затем * убить их сверху вниз. Мое решение строит дерево за один проход через Process.GetProcesses(), тогда вызывающий может убить их сверху вниз или снизу вверх или может просто использовать данные дерева. – NVRAM