Процесс отказывается умирать - PullRequest
1 голос
/ 21 сентября 2010

На основе других вопросов , я использую System.Diagnostics.Process до Start и Kill процесс:

this.childProcess.Kill();
this.childProcess.WaitForExit();
this.childProcess.Close();

Я бы предположил, что WaitForExit имеет дело с асинхронной природой команды Kill, однако рассматриваемый процесс (perl.exe) отказывается умереть. Вместо этого он задерживается на некоторое время.

Этот "период времени" вызывает состояние гонки. Могу ли я в любом случае убедиться, что этот процесс действительно умирает?

1 Ответ

3 голосов
/ 21 сентября 2010

Я не уверен, что вы подразумеваете под "убедитесь, что этот процесс действительно умирает". Внутри этого метода Kill в конечном итоге вызывается TerminateProcess , который является наиболее эффективным способом уничтожения процесса, и WaitForExit не вернется, пока процесс фактически не завершится.

Метод Kill может не завершить процесс по крайней мере в 2 обстоятельствах

  1. У вас недостаточно прав для завершения процесса
  2. К процессу подключен отладчик (я думаю, что это мешает работе TerminateProcess).
  3. Бесперебойная операция ввода / вывода (спасибо, Даниэль)

Применимо ли что-либо из этого к вашему сценарию?

...