[英]System.Diagnostics.Process not Exiting in Code
我有以下代碼在另一台服務器上運行良好。 問題是進程似乎永遠不會進入退出狀態。 被調用的 exe 在最后一步創建一個文件,這個文件確實被創建了,但我的代碼似乎永遠不知道這個過程已經完成。 此外,手動運行時,被調用的 exe 運行時間遠少於 10 秒。 我的代碼如下所示:
System.Diagnostics.Process proc = new System.Diagnostics.Process() proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.FileName = exeConf.CMD;
proc.StartInfo.Arguments = argString;
proc.Start();
proc.WaitForExit(10000);
if(proc.HasExited)
msgLine = proc.StandardError.ReadToEnd();
請參閱此MSDN 文章。
如果父進程在 p.StandardOutput.ReadToEnd 之前調用 p.WaitForExit 並且子進程寫入足夠的文本來填充重定向的流,則會導致死鎖情況。 父進程將無限期地等待子進程退出。 子進程將無限期地等待父進程從完整的 StandardOutput 流中讀取。
看來,如果Process.StandardOutput.ReadToEnd()
具有后要立即調用Process.Start()
否則就可能造成僵局。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.