Убить ребенка-процесс на конец - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть приложение C #, которое запускает некоторые дочерние процессы и перенаправляет их стандартный ввод и вывод.

Если я закрою приложение обычным способом, все дочерние процессы будут уничтожены, но еслиприложение закрывается диспетчером задач или другим способом, которым я не могу закрыть дочерние процессы.

Они существуют и требуют много ресурсов ЦП (почти 99%).Я думаю, что им нужно так много энергии, потому что их «перенаправленный» стандартный вывод не читается?

Всегда ли есть способ закрыть дочерние процессы?Или уменьшить их CPU-Time после уничтожения родительского процесса?

спасибо и наилучшими пожеланиями

Кевин Мейер

Ответы [ 5 ]

1 голос
/ 05 сентября 2011

Краткий ответ - Нет!

Когда пользователь завершает процесс подачи заявки, он просто прекращается.Вы ничего не можете с этим поделать, если у вас нет исходного кода дочерних процессов и измените его так, чтобы он завершался после родительского завершения, или не используйте отдельный процесс-наблюдатель для завершения дочерних процессов вашего приложения, когда оно завершено.

0 голосов
/ 05 сентября 2011

Вы можете использовать именованный канал и т. Д. Для связи между родительским и дочерним процессами, продолжая проверять, есть ли родительский или нет.

0 голосов
/ 05 сентября 2011

Если вы хотите гарантировать, что дочерние процессы завершаются после завершения родительского процесса, вы можете использовать объекты задания . К сожалению, не существует простого способа сделать это из управляемого кода; это потребовало бы большого количества вызовов взаимодействия P / Invoke для Win32 API, таких как CreateJobObject , AssignProcessToJobObject и т. д. Но в целом это должно быть возможно.

0 голосов
/ 05 сентября 2011

Если бы у меня была эта проблема, я бы иногда проверял выполнение родительского процесса во всех дочерних процессах, если родительский процесс не существует, дочерний процесс завершился бы.

0 голосов
/ 05 сентября 2011

Перенаправление потоков не должно само по себе вызывать высокую загрузку процессора, возможно, что-то еще происходит.

...