我写了下面的代码并在我的linux中运行。每次fork终端打印两个PID,显示两个进程都是由操作系统调度的,然后是执行“scanf”的时候,两个进程都会被阻塞,等待输入。但是每次我输入一个数字,然后在终端上打印相同的PID。这是否意味着当一个终端IO相遇时,操作系统调用相同的进程,或者发生其他事情?

int main(int argc, char* argv[])
{
    int num;

    if(fork() >= 0)
    {
       printf("%x\n",getpid());
       while(1)
       {
          if(scanf("%d",&num) != EOF)
          {
             printf("%x\n",getpid());
          }
       }
    }
    printf("\nit is over:%x\n", getpid());
}

最佳答案

正如亨特·麦克米伦在评论中已经指出的,你正在为父母和孩子分组。现在它们都按照输出的不同的PIDs进行调度,现在都在scanf等待。输入数据后,您只看到一个PID,因为您输入的输入是一个进程的一部分。其他进程(可以是父进程或子进程)仍在等待您输入内容。现在,即使您的终端被一个进程连续输出的单个PID所淹没,请再次尝试输入一些数据并按enter。现在您可以看到两个PID正在打印!

关于c - 关于操作系统的进度计划?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9861838/

10-13 05:53