我已经写了客户端服务器代码,我有很多的连接,让每个节点代表不同的进程在同一台机器上。 而要做到这一点,我显然使用fork()。
但现在的问题是所有的结果都显示在同一个terminal上。 我想知道是否有任何方式,例如在每个fork()
或进程创build后,新的terminal将被打开,并在特定terminal上显示该进程的所有结果。
PS:我已经尝试过system("gnome-terminal")
但它只是打开新的terminal,但所有的结果只能在同一个terminal上显示。 所有新的terminal只是开放,并保持空白,没有任何结果。
另外我已经通过这个链接如何在C中调用另一个terminal输出编程在Linux中,但我不想运行我的程序参数或任何。 它应该像./test
一样
这是我的代码:
for(int i=0;i<node-1;i++) { n_number++; usleep(5000); child_pid[i]=fork(); if(!child_pid[i]) { system("gnome-terminal"); file_scan(); connection(); exit(0); } if(child_pid[i]<0) printf("Error Process %d cannot be created",i); } for(int i=0;i<node-1;i++) wait(&status);
所以基本上我想要的是每个进程都应该有一个新的terminal只显示进程信息或结果。
我真正想要的是:
我知道它可以使用IPC(Inter Process Communication)来实现,但是还有其他的方法吗? 我的意思是只有2-3个左右的命令? 因为我不想在这部分编码上投入太多。
提前致谢!!!
也许你想要那样的东西。 这个程序使用了unix98伪终端(PTS),这是一个主从之间的双向通道。 所以,对于你所做的每一个分支,你都需要创建一个新的PTS,通过调用三元组posix_openpt,grantpt,在主端的解锁和从端的ptsname。 不要忘记纠正每边的初始文件描述符(stdin,stdout和sdterr)。
请注意,这只是一个程序来证明这个概念,所以我没有做任何形式的错误检查。
#define _XOPEN_SOURCE 600 #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <libgen.h> #include <string.h> #include <fcntl.h> int main() { pid_t i; char buf[10]; int fds, fdm, status; fdm = posix_openpt(O_RDWR); grantpt(fdm); unlockpt(fdm); close(0); close(1); close(2); i = fork(); if ( i == 0 ) { // father dup(fdm); dup(fdm); dup(fdm); printf("Where do I pop up?\n"); sleep(2); printf("Where do I pop up - 2?\n"); waitpid(i, &status, 0); } else { // child fds = open(ptsname(fdm), O_RDWR); dup(fds); dup(fds); dup(fds); strcpy(buf, ptsname(fdm)); sprintf(buf, "xterm -S%c/2", basename(buf)); system(buf); exit(0); } }