使用线程打开2个控制台时,程序会冻结

时间:2013-12-02 06:10:12

标签: c multithreading pipe freeze

我正在尝试在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);
}

1 个答案:

答案 0 :(得分:0)

问题在于

system("xterm -e ./Rover");

此呼叫使终端呼叫xterm然后等待它。

要验证它,只需从终端运行xterm,您就会发现自己的终端会冻结。

我能想到的一个解决方案是创建一个子进程并从那里调用xterm。

pid_t test = fork();
if(!test){
    system("xterm -e ./Rover");
} else {
   //Rest of your task.

}