gpt4 book ai didi

c# - Process.Start() 创建的进程在父应用程序关闭时终止

转载 作者:太空狗 更新时间:2023-10-29 11:10:43 25 4
gpt4 key购买 nike

我在 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 相关的问题吗?如果确实如此,那么我现在的做法是否有任何替代方案,因为我没有想法。

最佳答案

这是一个适合我的完整示例:

using System;
using System.Diagnostics;

class Tick {
static void Main(string[] args) {
Process p = new Process();

p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.WorkingDirectory = Environment.CurrentDirectory;
p.StartInfo.FileName = "/bin/sh";
p.StartInfo.Arguments = "test.sh";

p.EnableRaisingEvents = true;
p.ErrorDataReceived += new DataReceivedEventHandle(ShellProc_ErrorDataReceived);

p.Start();
System.Threading.Thread.Sleep (5000);
Console.WriteLine ("done");
}
static void ShellProc_ErrorDataReceived (object sender, DataReceivedEventArgs ea)
{
}
}

然后test.sh是:

while true; do
date;
sleep 1;
done

当我从终端运行示例时,test.sh 脚本将在示例程序退出后继续输出数据。

关于c# - Process.Start() 创建的进程在父应用程序关闭时终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8569307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com