我在写一个程序来计算终端,我写了另一个只输入并打印出来的虚拟程序。 dummy prog:在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运行虚拟程序。我的问题是他们中的哪一个从用户那里获得输入?在它们之间是否有上下文切换,以便一个进程一次接受输入,否则父进程将接受所有输入,除非我呼叫等待。
编辑:输入不会被共享。
然后我想调用子进程到前台我尝试使用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和之后是相同的。
2013-11-15
Anton.P
+1
您应该*阅读'fork'和'exec'的手册*,并找出自己打开文件描述符(如标准输入)会发生什么情况。 –
+0
你好那里,我的问题是没有与叉执行,但与防止和允许输入的新进程 –
+1
您的问题最终是关于什么发生在标准输入。这被记录为'fork'和'exec'行为的一部分。 –