我正在尝试在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);
}
答案 0 :(得分:0)
问题在于
system("xterm -e ./Rover");
此呼叫使终端呼叫xterm
然后等待它。
要验证它,只需从终端运行xterm
,您就会发现自己的终端会冻结。
我能想到的一个解决方案是创建一个子进程并从那里调用xterm。
pid_t test = fork();
if(!test){
system("xterm -e ./Rover");
} else {
//Rest of your task.
}