Asp.net core mvc .NET核心:Process.Start()离开<;不复存在>;后面的子进程

Asp.net core mvc .NET核心:Process.Start()离开<;不复存在>;后面的子进程,asp.net-core-mvc,.net-core,Asp.net Core Mvc,.net Core,我正在构建一个部署在CentOS 7.2上的ASP.Net Core(netcore 1.1)应用程序 我有一个操作,它通过System.Diagnostics.process调用外部进程(也使用.net core构建的控制台应用程序),而不是等待它退出后再返回 问题是,即使在完成执行后,所述进程仍会变成并保持。我不想等待它退出,因为这个过程可能需要几分钟才能完成它的工作 下面是一个示例代码 //The process is writing its progress to a sqlite da

我正在构建一个部署在CentOS 7.2上的ASP.Net Core(netcore 1.1)应用程序

我有一个操作,它通过System.Diagnostics.process调用外部进程(也使用.net core构建的控制台应用程序),而不是等待它退出后再返回

问题是,即使在完成执行后,所述进程仍会变成并保持
。我不想等待它退出,因为这个过程可能需要几分钟才能完成它的工作

下面是一个示例代码

//The process is writing its progress to a sqlite database using a
//previously generated guid which is used later in order to check
//the task's progress

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "/bin/sh -c \"/path/to/process/executable -args\"";
psi.UseShellExecute = true;
psi.WorkingDirectory = "/path/to/process/";
psi.RedirectStandardOutput = false;
psi.RedirectStandardError = false;
psi.RedirectStandardInput = false;

using(Process proc = new Process({ StartInfo = psi }))
{
    proc.Start();
}
这个过程开始并完成它的工作。它将其特定任务的进度写入sqlite数据库。然后,我可以探测该数据库以查看进度

一切运行正常,但我可以看到,在使用
ps-ef | grep executable
执行进程后,它被列为
,除了杀死它的父进程(即我的CoreMVC应用程序)之外,我没有其他办法摆脱它


有没有一种方法可以在.NET核心应用程序中启动进程而不等待它退出,并强制父应用程序获取生成的子进程?

我通过允许进程引发事件,以某种方式修复了它:

using(Process proc = new Process(
    { 
        StartInfo = psi, 
        EnableRaisingEvents = true //Allow the process to raise events, 
                                   //which I guess triggers the reaping of 
                                   //the child process by the parent 
                                   //application
    }))
{
    proc.Start();
}