我在Debian 6上使用C#和Mono 2.10.2.因此,场景是我使用Process.Start()创建了一个如下流程:Process p = new Process();p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardOutput = true;p.Start...
我在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应用程序也终止了.
我查看了此处在堆栈溢出上发布的其他几个类似问题,没有一个得出明显的结论,包括以下内容:
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()创建的进程在父应用程序关闭时终止
基础教程推荐
- C# Datatable的几种用法小结 2023-03-29
- C#去除字符串中的反斜杠实例(推荐) 2022-11-28
- c#多线程之线程基础 2023-05-31
- UnityRTS实现相机移动缩放功能 2023-04-09
- 详解C#中普通缓存的使用 2023-04-15
- C#-Windows7 64位上的LinqToExcel与Office 64位 2023-11-27
- C# DataGridView绑定数据源的方法 2022-12-31
- C# 利用Selenium实现浏览器自动化操作的示例代码 2023-03-10
- C# 使用 Filestream 修改大文件指定位置数据 2023-07-04
- C#中的只读结构体(readonly struct)详解 2023-03-14