我试图用C语言编写一个程序,我必须打开另一个控制台,上面有其他程序,当我这样做时,第一个程序冻结,直到我关闭第二个程序。我一直在寻找没有结果的答案。
这就是我知道失败的代码。
system("setterm -term linux -back white -fore black -clear");
char line[LEN];
system("cd ~/Desktop/ && gcc -o Rover Rover.c -lpthread");
FILE *cmd = popen("pidof -s Rover", "r");
fgets(line, LEN, cmd);
pid_t pid = strtoul(line, NULL, 10);
pclose(cmd);
printf("check");
if(pid == 0){
system("xterm -e ./Rover");
sleep(1);
cmd = popen("pidof -s Rover", "r");
fgets(line, LEN, cmd);
pid = strtoul(line, NULL, 10);fflush(stdout);
//pclose(cmd2);
system("\n");
fflush(stdout);
}
最佳答案
问题在于
system("xterm -e ./Rover");
此呼叫使终端呼叫
xterm
,然后等待。要验证它,只需从您的终端运行
xterm
,您就会注意到您自己的终端将冻结。我能想到的一个解决方案是创建一个子进程并从那里调用xterm。
pid_t test = fork();
if(!test){
system("xterm -e ./Rover");
} else {
//Rest of your task.
}