C - Linux 中两个进程之间的上下文切换



我正在编写一个对终端求和的程序,我写了另一个虚拟的progra,它只接受输入并打印出来。 假人程序:

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

在我的主程序中,我使用 fork->exec 运行虚拟程序。 我的问题是他们中的哪一个从用户那里获得输入? 它们之间是否有上下文切换,以便一个进程一次接受输入,或者父进程将接受所有输入,除非我调用 wait。

编辑:输入将不会共享。

然后我想将子进程调用到前台,我尝试使用 tcsetpgrp,但没有成功。 我执行以下操作:

if((son = fork())==0){//son process
}else{//father
printf("the old group id is:%dn", getpgid(son));
setpgid(son,son);
k = printf("the new group id is:%dn",getpgid(son));
j = tcgetpgrp(0, getpgid(son))
}

由于某种原因,j 设置为 25,并且 setpgrp 之前和之后的 PGID 是相同的。

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

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

最新更新