csharp cygwin无法杀死mintty.exe

时间:2017-04-05 11:46:31

标签: c# process cygwin system.diagnostics

我正在使用Process中的System.Diagnostics班级,这是我的代码:

public void doMain() {
    Process cygwin = new Process();
    cygwin.StartInfo.FileName = "C:\\cygwin64\\bin\\mintty.exe";
    cygwin.Start();
    cygwin.Refresh();
    Thread.Sleep(1000);
    cygwin.Kill();
    cygwin.WaitForExit();
}

通常这应该运行mintty.exe进程,然后等待1秒然后终止该进程,但它给出了我在kill调用之前已经关闭的错误。

cygwin.Kill();行上调用此异常:

  

未处理的类型' System.InvalidOperationException'发生在System.dll中   附加信息:无法处理请求,因为该流程已退出。

为什么会这样?!
如果我将"C:\\cygwin64\\bin\\mintty.exe"替换为"C:\\cygwin64\\bin\\bash.exe",则异常就会消失! 有什么问题?

2 个答案:

答案 0 :(得分:0)

你已经在杀死进程后调用cygwin.WaitForExit(),因此错误。

将您的代码更新为:

public void doMain() {
    Process cygwin = new Process();
    cygwin.StartInfo.FileName = "C:\\cygwin64\\bin\\mintty.exe";
    cygwin.Start();
    cygwin.Refresh();
    Thread.Sleep(1000);
    cygwin.Kill();
    //cygwin.WaitForExit();
}

它应该有用。

答案 1 :(得分:0)

这是启动独立于启动过程和方法的Windows程序的简单方法。程序立即分叉(启动一个新进程),新的子进程打开薄薄的窗口,原始进程退出。这是为了防止你做你想做的事情。它在新的进程树中创建子进程。否则,如果从cmd窗口运行程序,则在关闭cmd窗口时它将关闭。