Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一个过程就是拒绝死亡_C#_Kill - Fatal编程技术网

C# 一个过程就是拒绝死亡

C# 一个过程就是拒绝死亡,c#,kill,C#,Kill,基于,我正在使用System.Diagnostics.Process来Start和Kill一个进程: this.childProcess.Kill(); this.childProcess.WaitForExit(); this.childProcess.Close(); 我假设WaitForExit处理Kill命令的异步性质,但是所讨论的进程(perl.exe)拒绝死亡。相反,它会停留一段时间 此“时间段”会导致竞争状况。无论如何,我是否可以确保这个进程真的死亡?我不确定你所说的“确保这个进

基于,我正在使用
System.Diagnostics.Process
Start
Kill
一个进程:

this.childProcess.Kill();
this.childProcess.WaitForExit();
this.childProcess.Close();
我假设
WaitForExit
处理
Kill
命令的异步性质,但是所讨论的进程(perl.exe)拒绝死亡。相反,它会停留一段时间


此“时间段”会导致竞争状况。无论如何,我是否可以确保这个进程真的死亡?

我不确定你所说的“确保这个进程真的死亡”是什么意思。在后台,
Kill
方法最终会调用这是杀死进程的最有效方法,而
WaitForExit
在进程真的死亡之前不会返回

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

  • 您没有足够的权限终止进程
  • 进程附带了一个调试器(我相信这会阻止TerminateProcess工作)
  • 不间断I/O操作(谢谢Daniel)

  • 这两种方法是否适用于您的场景?

    我相信我有足够的权利,因为:a)我产生了它,b)它确实“有时”会死亡。如果在父进程上运行调试器,或者根本不使用调试器,我就会遇到问题。还有一种情况是,进程无法死亡(至少暂时不能):如果它正在执行不间断的I/O操作。有问题的perl.exe进程很可能只是执行某种类型的文件或套接字I/O,即使在调用
    TerminateProcess
    之后,操作系统仍将等待未完成的I/O刷新。如果你的组合中有马车司机,这可能永远不会发生。马克·鲁西诺维奇(Mark Russinovich)有一段时间了,这可能很有用。@Daniel如果它正在进行某种不间断的I/O(比如写入磁盘),我如何知道它实际上何时完成了?这是一个XY问题。Y是“为什么我不能终止进程”。X是“为什么我首先编写代码来终止进程”。我不得不推荐你去追求X。@Hans我认为了解流程为什么没有消亡是分析我项目中数据流的一个有用步骤。我可以重写我的项目的大部分,前提是这个过程不能仅仅为了重新引入同样的问题而终止。