"gnome-terminal --" 个出口,所有分叉都已终止



我写了一个简单的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 -- ...的一个问题。

我也用xterm -e替换了gnome-terminal --,但事情是一样的。

有没有办法在新终端窗口中打开一个运行a.out的新终端,并使firefox成为孤儿?(我知道如何在新终端中执行a.out,并在a.out返回后保留新终端,但我想退出新终端并保持firefox为孤立(.

Firefox被SIGHUP杀死,因为当gnome-terminalxterm退出时,它的控制终端会消失。你有两个选项可以阻止这种情况:

  1. 执行nohup的操作:通过在execl之前执行signal(SIGHUP, SIG_IGN);,将Firefox设置为忽略SIGHUP
  2. execl之前执行setsid(),这样进程就不会有控制终端。注意,如果open由于某种原因发生这种情况,这可能会导致Firefox稍后突然获取控制终端

最新更新