c-使用线程打开2个控制台时程序冻结



我正试图用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.
}

最新更新