gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:52 25 4
gpt4 key购买 nike

我在 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 的脚本吗?

最佳答案

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

关于linux - 如何进行 MONO Process() 调用以启动一个在父进程死亡时不会死亡的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35499776/

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