Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 即使进程正在运行,终端也会停止打印_C_Sockets_Unix_Terminal_Gnome Terminal - Fatal编程技术网

C 即使进程正在运行,终端也会停止打印

C 即使进程正在运行,终端也会停止打印,c,sockets,unix,terminal,gnome-terminal,C,Sockets,Unix,Terminal,Gnome Terminal,我曾尝试在新终端中打开子进程,但在网上或任何书籍中都没有找到解决方案。 我最近研究了Unix域套接字和传递文件描述符,并尝试使用它们来实现它 下面是我的程序的伪代码send_fd和recv_fd是Richard Stevens书中定义的传递fd的函数 这些程序几乎如预期的那样工作。子进程的输出和输入被重定向到新创建的终端。但子进程只能在进程temp仍在运行时打印。当temp终止时,子设备停止在新终端中打印,新终端关闭。我应该如何克服这个问题?提前谢谢 int forknt() { sys

我曾尝试在新终端中打开子进程,但在网上或任何书籍中都没有找到解决方案。 我最近研究了Unix域套接字和传递文件描述符,并尝试使用它们来实现它

下面是我的程序的伪代码
send_fd
recv_fd
是Richard Stevens书中定义的传递fd的函数

这些程序几乎如预期的那样工作。子进程的输出和输入被重定向到新创建的终端。但子进程只能在进程
temp
仍在运行时打印。当
temp
终止时,子设备停止在新终端中打印,新终端关闭。我应该如何克服这个问题?提前谢谢

int forknt()
{
    system("gnome-terminal -- \"./temp\""); //run auxiliary program in a new terminal
    //sfd is fd of the unix domain socket used to connect to ./temp
    int fd0 = recv_fd(sfd); //get stdin of new terminal
    int fd1 = recv_fd(sfd); //get stdout of new terminal
    int c = fork();
    if(!c)
    {
        dup2(fd0, 0);
        dup2(fd1, 1);
    }
    close(sfd);
    return c;
}

int main()
{
    int c = forknt();
    printf("%d\n", c);
    return 0;
}
辅助程序代码temp

int main()
{
    send_fd(sfd, 0);
    send_fd(sfd, 1);
    return 0;
}

终端程序设置它启动的子进程的标准输入和输出,并将它们连接到自身进行I/O,当子进程终止时,终端程序也将终止。相反,如果您在第一个
/temp
程序终止后告诉
gnome终端
启动shell,那么它将保持打开状态,我认为您的第一个程序应该能够继续读取和写入传输的文件描述符

gnome-terminal -- "./temp; exec sh"