我正在写一个程序,它描述一个终端,我写了另一个虚拟程序,它只接受输入并打印出来。虚拟程序:

int main(int argc, char *argv[]) {
char text[128] = {0};
while(1){
    fgets (text, 128, stdin);
    printf("%s\n", text);
}
return 0;
}

在主程序中,我使用fork->exec运行虚拟程序。我的问题是哪一个从用户那里得到输入?它们之间是否存在上下文切换,以便一个进程一次接受输入,或者父进程将接受所有输入,除非我调用wait。
编辑:不会共享输入。
然后我想将子进程调用到前台,我尝试使用tcsetpgrp,但没有成功。我执行以下操作:
if((son = fork())==0){//son process
}else{//father
printf("the old group id is:%d\n", getpgid(son));
setpgid(son,son);
k = printf("the new group id is:%d\n",getpgid(son));
j = tcgetpgrp(0, getpgid(son))
}

出于某种原因,j被设置为25,并且setpgrp之前和之后的pgid都是相同的。

最佳答案

主程序连接到终端并获取输入。如果使用线程而不是创建fork,那么I/O将在线程之间共享。
如果只有一个线程读取,它将获取所有输入。如果两个或多个线程读取,它们就不会共享数据,而且结果有点不可预测。

关于c - Linux中两个进程之间的上下文切换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19997250/

10-13 08:18