"gnome-terminal --" 退出并终止所有分叉

"gnome-terminal --" exits with all forks terminated

我写了一个简单的 C 程序来创建孤儿进程:

int main(){
  int pid = fork();
  if(pid == 0){
      execl("/usr/bin/firefox", "firefox", (char*)0);
  }else{
      sleep(2);
      return 0;
  }
}

我将此文件编译为 a.out 和 运行 终端中的以下命令:

gnome-terminal -- ./a.out

这会打开一个新的终端并 firefox,但是在 2 秒后终端退出并且 firefox 终止,但我希望 firefox 成为一个带有终端退出的孤立进程。

我的程序是正确的,因为当我尝试

./a.out

直接在终端中,firefox 打开,当我手动关闭当前终端时,firefox 仍然存在。所以一定是gnome-terminal -- ....

的问题

我也把gnome-terminal --换成了xterm -e,不过都是一样的

有什么办法可以在新终端window中打开一个带有a.out运行的新终端并使firefox成为孤儿?(我知道如何执行a.out 在新终端中并在 a.out return 之后保留新终端,但我想退出新终端并使 firefox 成为孤儿) .

Firefox 被 SIGHUP 杀死,因为它的控制终端在 gnome-terminalxterm 退出时消失。你有两种选择来阻止它:

  1. nohup 做的事:通过在 execl.
  2. 之前执行 signal(SIGHUP, SIG_IGN); 将 Firefox 设置为忽略 SIGHUP
  3. execl 之前执行 setsid() 以便进程没有控制终端。请注意,这可能会导致 Firefox 稍后突然获得一个控制终端,如果它出于某种原因 open 一个。