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

}

10-08 08:09