Вопрос

У меня есть C#-Application, которое запускает некоторые детские процессы и перенаправляют их вход и выпуск Standart.

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

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

Есть ли способ всегда закрывать детские процессы? Или уменьшить время их процессора после убийства родительского процесса?

Спасибо и с уважением

Кевин Мейер

Это было полезно?

Решение

Короткий ответ - нет!

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top