linux中两个进程之间的上下文切换

时间:2013-11-15 09:06:54

标签: c linux

我正在编写一个总结终端的程序,我写了另一个虚拟程序,只接受输入并打印出来。虚拟编程:

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都是相同的。

1 个答案:

答案 0 :(得分:1)

主程序连接到终端并获取输入。如果使用线程而不是创建fork,则I / O将在线程之间共享。

如果只有一个线程读取,它将获得所有输入。如果两个或多个线程读取,它们不共享数据,结果有点不可预测。

相关问题