【发布时间】:2017-04-05 11:46:31
【问题描述】:
我正在使用来自System.Diagnostics 的Process 类,这是我的代码:
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 秒然后终止该进程,但它给我的错误是它在终止调用之前已关闭。
在线cygwin.Kill();调用出现这个异常:
System.dll 中出现“System.InvalidOperationException”类型的未处理异常
附加信息:无法处理请求,因为进程已退出。
为什么会这样?!
如果我用"C:\\cygwin64\\bin\\bash.exe" 替换"C:\\cygwin64\\bin\\mintty.exe",异常就会消失!
有什么问题?
【问题讨论】:
-
如果您从
file explorer而不是在代码中运行mintty.exe,它会立即退出吗?我有一种感觉bash.exe在你加载它的时候为你提供了一个命令行实用程序,但是mintty没有这样的东西。 -
@JayGould 不!为什么它应该立即退出?我让我的代码等待
1000毫秒,然后终止该进程。好吧,mintty.exe在某种程度上就像是bash.exe的包装器。 -
首先,问问自己在执行 kill 方法期间该错误/异常意味着什么。当我读到它时, kill 失败了,因为您试图杀死的进程已经退出。在下面阅读我的答案。 Start 方法创建进程#p,该进程创建子进程#c。进程#p 退出。进程#c 打开 mintty 窗口。您尝试杀死进程#p,但它已经被杀死/退出。 cygwin 对象中的进程号是多少? mintty 的进程号是多少(提示:使用任务管理器)?
-
@DougHenderson 是的,他们是不同的,你的权利。
-
@DougHenderson 所以你认为有什么办法可以控制薄荷味的过程吗?
标签: c# process cygwin system.diagnostics