gpt4 book ai didi

更改控制终端

转载 作者:行者123 更新时间:2023-11-30 18:03:16 25 4
gpt4 key购买 nike

我想出了这样的东西..

int main (unsigned argc, char **argv)
{
printf("***this is the original terminal window!!!***\n");
if(!fork()){//child
system("gnome-terminal -e ./client");
}
else{
printf("this is the parent, printing in the original terminal window\n");
}
}

它会打开一个新的终端窗口,在其中执行 ./client。唯一的问题是新的终端窗口在 ./client 事件结束后自动关闭。我怎样才能解决这个问题而不做一些愚蠢的事情,比如在 ./client 上使用 for(;;) ?此外,整个方法还不是最佳解决方案......

真正希望能够做到的是:

int main (unsigned argc, char **argv)
{
printf("***this is a generator!!!***\n");
if(!fork()){//child
system("gnome-terminal or wathever"); //the solution must be here right??
printf("this get's printed on the new window and whatever i do on the\
child process get's done there too")
//and the window won't close automatically
}
else{
printf("this is the parent, printing in the original terminal window\n");
}
}

它会更灵活,我只是不想从另一个文件中执行exec()...

我使用的是 Ubuntu 11.10,语言是 C。

最佳答案

我认为您应该使用 setpgid() 将子级与其父级断开。

From Wiki :

系统调用setpgid()用于设置进程的进程组ID,从而要么将该进程加入到现有进程组中,要么在该进程的 session 中创建一个新的进程组,该进程成为该进程新创建的小组的组长。当具有该标识符的进程组仍然存在时(即进程组的领导者已退出,但组中的其他进程仍然存在),POSIX 禁止重复使用该进程 ID。从而保证进程不会意外地成为进程组的领导者。

关于更改控制终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608794/

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