进程拒绝消亡

发布于 09-24 09:17 字数 433 浏览 1 评论 0原文

基于其他问题,我使用System.Diagnostics.ProcessStartKill 进程:

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

我假设 WaitForExit 处理 Kill 命令的异步性质,但是有问题的进程(perl.exe)拒绝终止。相反,它会持续一段时间。

这个“时间段”导致了竞争条件。无论如何,我可以确保这个进程确实终止吗?

Based on other questions, I'm using System.Diagnostics.Process to Start and Kill a process:

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

I would assume that WaitForExit deals with the asynchronous nature of the Kill command, however the process in question (perl.exe) refuses to die. Instead it lingers for some period of time.

This "period of time" is causing a race condition. Is there anyway I can make sure this process actually dies?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淡淡的优雅2024-10-01 09:17:51

我不确定你所说的“确保这个进程实际上消失”是什么意思。在底层,Kill 方法最终调用 TerminateProcess 这是终止进程的最有效方法,并且 WaitForExit 在进程实际消失之前不会返回。

Kill 方法至少在两种情况下无法实际终止进程

  1. 您没有足够的权限来终止进程
  2. 该进程附加了一个调试器(我相信这会阻止 TerminateProcess 工作) 。
  3. 不间断的 I/O 操作(感谢 Daniel)

这些是否适用于您的场景?

I'm not sure what you mean by "make sure this process actually dies." Under the hood the Kill method eventually calls TerminateProcess which is the most effective way to kill a process and WaitForExit won't return until the process is actually gone.

The Kill method can fail to actually kill the process in at least 2 circumstances

  1. You don't have sufficient rights to kill the process
  2. There is a debugger attached to the process (I believe this prevents TerminateProcess from working).
  3. Uninterruptable I/O operation (thanks Daniel)

Do either of these apply to your scenario?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文