【发布时间】:2011-12-22 20:10:29
【问题描述】:
我在 Debian 6 上使用 C# 和 Mono 2.10.2。
所以场景是我使用 Process.Start() 创建了一个流程,如下所示:
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.WorkingDirectory = "/home/lucy/";
p.StartInfo.FileName = "/bin/sh";
p.StartInfo.Arguments = "/home/lucy/test.sh";
p.EnableRaisingEvents = true;
p.ErrorDataReceived += new DataReceivedEventHandler(ShellProc_ErrorDataReceived);
p.Start();
在这种情况下称为 test.sh 的 shell 脚本会运行,它会做几件事,包括启动一个 java 应用程序。我收到的问题是当 c# 应用程序终止时,bash 脚本/java 应用程序也会终止。
我查看了 Stack Overflow 上发布的其他几个类似问题,但没有一个得出明显的结论,包括这个:
How to create a Process that outlives its parent
根据一些用户和据称的文档,由 Process.Start() 创建的进程不应在应用程序终止时终止,但显然在我的情况下这是不正确的。那么这可能是一个与 Mono 相关的问题吗?如果确实如此,那么我现在的做法是否有任何替代方案,因为我没有想法。
【问题讨论】:
-
这绝对不会在 Windows 中发生,所以是的,这一定是 mono/nix 特定的。
-
请将您的更新发布为新答案,然后将其标记为解决方案。