繁体   English   中英

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

[英]context switch between two processes in 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都相同。

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

如果仅读取一个线程,则它将获取所有输入。 如果读取了两个或更多线程,则它们不会共享数据,结果是不可预测的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM