fork()到底发生了什么?

Mih*_*csu 3 c++ fork process

int main(){

    char ch;

    fork();

    cin >> c;
}
Run Code Online (Sandbox Code Playgroud)

在调用fork()之后,我应该有2个运行相同代码的确切进程.为什么在运行这个简单的例子之后,我被要求只输入一次字符,要么两次?我运行这个程序时,系统不应该期望每次输入2个输入吗?

>./a.out 
a
>./a.out
a
b
>
Run Code Online (Sandbox Code Playgroud)

Die*_*Epp 6

您有两个进程同时从终端读取.任何人都猜测哪个进程得到了输入.

  • 如果父进程首先获得输入,它将退出并将控制权返回给shell.(请注意,这实际上会导致重复相同的情况,shell和子进程争夺输入.)
  • 如果子进程首先获得输入,它将退出但控制不会返回到shell,直到父进程退出.

如果您有两个进程从同一终端读取,则不应期望一致的行为.