如何进行MONO Process()调用以启动父进程死亡时不会死的进程?

时间:2016-02-18 23:02:31

标签: linux process-management mono

我在Linux系统上使用Mono来启动进程。偶然地,父进程死于不合时宜的死亡,并带着子进程,但我需要让子进程继续进行。
在测试中,我测试的System.Diagnostics.Process.Start()的每个变体都会导致它的子进程在我杀死父进程时死亡。 是否有一些我缺少的设置,或另一种方法来实现这一目标? 作为测试,这个:

System.Diagnostics.Process.Start(new ProcessStartInfo("journalctl", "-f") {UseShellExecute = true});


此:

System.Diagnostics.Process.Start(new ProcessStartInfo("journalctl", "-f") {UseShellExecute = false});

和本:

System.Diagnostics.Process.Start("journalctl", "-f");

将启动'journalctl'('ps -aef'表示正确的父子ID),当我杀死父进程时,'journalctl'也会死掉。
我应该为子进程启动一个使用nohup和disown的脚本吗?

1 个答案:

答案 0 :(得分:0)

完成子进程与父进程的解除关联需要子进程进行多次系统调用;如果MONO无法访问相应的系统调用(fork首先创建子进程,然后setsid转义父进程组,处理标准输入,这可能更容易通过shell包装器执行和标准输出文件句柄,可能是chdir/,以及我忘记的任何其他内容。您的MONO调用看起来更类似于system(3)系统调用,这也需要使用setsid等的包装器程序。