Csharp Cygwin无法杀死Mintty.exe



我正在使用System.DiagnosticsProcess类,这是我的代码:

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"的未处理异常.dll
其他信息:无法处理请求,因为进程已退出。

为什么会这样?!
如果我用"C:\cygwin64\bin\bash.exe"替换"C:\cygwin64\bin\mintty.exe",异常就会消失!
问题出在哪里?

您在已经杀死进程后调用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();
}

它应该有效。

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

相关内容

  • 没有找到相关文章

最新更新