C++ fork() & execl() 不要等待,完全分离

ask*_*_io 4 c++ unix fork

所以我有一个简单的 fork 和 exec 程序。它工作得很好,但我希望能够分离已启动的进程,我尝试分叉而不等待:

if((pid = fork()) < 0)
    perror("Error with Fork()");
else if(pid > 0) {
    return "";
}
else {
    if(execl("/bin/bash", "/bin/bash", "-c", cmddo, (char*) 0) < 0) perror("execl()");
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

它启动过程很好,但是当我的主应用程序关闭时 - 我的分叉过程也是如此。

在主进程(启动它的)关闭后,如何保持分叉进程运行?

感谢:D

ara*_*nid 7

如果您想启动分离/守护进程,需要做的各种事情:

  • 再次fork并退出第一个子进程(因此第二个子进程不再将原始进程作为其父进程pid)
  • 调用setsid(2)来获取新的会话和进程组
  • 重新打开 stdin/stdout/stderr 以取消引用控制 tty(如果有)。或者,例如,您可能继承了一个管道标准输出,如果您尝试编写它,它将被破坏并给您 SIGPIPE。
  • chdir 到 / 离开祖先的当前目录