Я пытался открыть дочерний процесс в новом терминале, но не нашел решения в Интернете или в какой-либо книге. Недавно я изучил Unix доменных сокетов и передаваемых файловых дескрипторов и попытался добиться этого, используя их.
Ниже приведен псевдокод для моей программы. send_fd
и recv_fd
- функции для передачи fds, как определено в книге Ричарда Стивенса.
Программы работают почти так, как ожидается. Вывод и ввод дочернего процесса перенаправляются на вновь созданный терминал. Но дочерний процесс может печатать только до тех пор, пока процесс 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;
}