0
我在寫一個程序來計算終端,我寫了另一個只輸入並打印出來的虛擬程序。 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和之後是相同的。
您應該*閱讀'fork'和'exec'的手冊*,並找出自己打開文件描述符(如標準輸入)會發生什麼情況。 –
你好那裏,我的問題是沒有與叉執行,但與防止和允許輸入的新進程 –
您的問題最終是關於什麼發生在標準輸入。這被記錄爲'fork'和'exec'行爲的一部分。 –