"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-terminal
或 xterm
退出时消失。你有两种选择来阻止它:
- 做
nohup
做的事:通过在 execl
. 之前执行 signal(SIGHUP, SIG_IGN);
将 Firefox 设置为忽略 SIGHUP
- 在
execl
之前执行 setsid()
以便进程没有控制终端。请注意,这可能会导致 Firefox 稍后突然获得一个控制终端,如果它出于某种原因 open
一个。
我写了一个简单的 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-terminal
或 xterm
退出时消失。你有两种选择来阻止它:
- 做
nohup
做的事:通过在execl
. 之前执行 - 在
execl
之前执行setsid()
以便进程没有控制终端。请注意,这可能会导致 Firefox 稍后突然获得一个控制终端,如果它出于某种原因open
一个。
signal(SIGHUP, SIG_IGN);
将 Firefox 设置为忽略 SIGHUP