父进程退出导致subprocess挂起

我有一对Windows控制台程序,用C#编写的父代,用C编写的子代; 父母用参数文件名称调用孩子,获取输出,等待退出,再次调用数据文件列表中的下一个,等等。 浏览整个数据文件列表可能需要几个小时,所以在testing中我通常要用^ C来杀死父进程,看看有没有subprocess还在运行,如果没有死掉,那应该是几秒钟之后,它被设定的计时器杀死。

实际上发生的是父进程退出,我得到了控制台,但subprocess仍然在后台,不使用CPU,永久挂起,直到用任务pipe理器杀死。 为什么会发生这种情况?如何防止?

父进程调用代码:

var worker = new Process() { StartInfo = new ProcessStartInfo("/ayane/ayane.exe", "-t=10 " + filename) { RedirectStandardError = true, RedirectStandardOutput = true, UseShellExecute = false, } }; worker.Start(); var output = worker.StandardOutput.ReadToEnd(); worker.WaitForExit(); 

子代码,设置一个计时器来杀死进程,如果它在几秒钟内没有完成:

 static VOID CALLBACK timeout(PVOID a, BOOLEAN b) { ExitProcess(0); } 

  HANDLE timer = 0; CreateTimerQueueTimer(&timer, 0, timeout, 0, (DWORD)(time_limit * 1000), 0, 0); 

更新:我刚刚尝试了一个testing,在那里我拿出了RedirectStandardOutputRedirectStandardError所以大概不再是pipe道的情况了,问题仍然以完全相同的方式发生,所以它似乎没有做redirect和破碎毕竟pipe道。

Solutions Collecting From Web of "父进程退出导致subprocess挂起"