C 关于操作系统的进程调度?

C 关于操作系统的进程调度?,c,process,io,operating-system,fork,C,Process,Io,Operating System,Fork,我编写了以下代码并在我的linux中运行。每次fork之后,终端都会打印两个PID,这表明两个进程都是由操作系统安排的,然后是执行“scanf”的时候,这两个进程都会被阻塞,等待输入。然而,每次我输入一个数字,然后我都会在终端上打印相同的PID这是否意味着当终端IO相遇或发生其他事情时,操作系统会调用相同的进程? int main(int argc, char* argv[]) { int num; if(fork() >= 0) { printf(

我编写了以下代码并在我的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());
}

这是因为,在if()语句中,fork()创建子进程并在无限循环中运行。有一个父进程的概念,即使用fork()系统调用创建的子进程的父进程。if()结束后的语句属于父进程,在这里,它将仅在子进程结束后执行。这就是为什么会得到相同的进程ID,即子进程ID。

这是因为在if()语句中,fork()创建子进程并在无限循环中运行。有一个父进程的概念,即使用fork()系统调用创建的子进程的父进程。if()结束后的语句属于父进程,在这里,它将仅在子进程结束后执行。这就是为什么您会得到相同的流程ID,即子流程。

正如Hunter McMillen在评论中指出的,您正在为父流程和子流程分组案例。现在,它们都按照不同的
PID
s输出进行了调度,现在它们都在
scanf
等待。一旦输入数据,您将只看到一个
PID
,因为您输入的输入是一个进程的一部分其他进程(可以是父进程或子进程)仍在等待您输入内容。现在,即使您的终端被一个进程连续输出的单个
PID
淹没,也要再次尝试输入一些数据并按enter键。现在您可以看到正在打印的
PID
s

正如亨特·麦克米伦(Hunter McMillen)在评论中所指出的那样,您正在为家长和孩子分组案例。现在,它们都按照不同的
PID
s输出进行了调度,现在它们都在
scanf
等待。一旦输入数据,您将只看到一个
PID
,因为您输入的输入是一个进程的一部分其他进程(可以是父进程或子进程)仍在等待您输入内容。现在,即使您的终端被一个进程连续输出的单个
PID
淹没,也要再次尝试输入一些数据并按enter键。现在您可以看到正在打印的
PID
s

您正在将测试用例分组,以确定您是否在父进程和子进程中
fork()
将子进程的PID返回给父进程(>0),而
fork()
将0返回给子进程。您正在将测试用例分组,以确定您是否在父进程和子进程中
fork()
将子进程的PID返回给父进程(>0),而
fork()
将0返回给子进程。这里没有
等待
。因此父级在
fork
之后继续执行,而不
等待子级结束以开始执行。父级和子级彼此独立执行。请参阅此处没有
等待
。因此父级在
fork
之后继续执行,而不
等待子级结束以开始执行。父级和子级彼此独立执行。无论我输入数据多少次并按enter键,我都会在屏幕上打印相同的PIDterminal@venus.w这只是一个巧合,你看到相同的PID。在我的电脑上,我可以看到两个PID的比例几乎相等。做一件事。输入字符,而不是为
scanf
输入数字,然后按enter键
scanf
将变得疯狂,PID将在一个过程中无限打印。再次输入一个字符,然后按enter键。现在你会看到两个PID都在无限地移动。我在ubuntu上运行我的程序,你的操作系统是什么,也许这取决于操作系统。即使我在ubuntu 11.10上。操作系统应该不重要。您是否尝试输入字符而不是我建议的数字?无论我输入数据并按enter键多少次,我都会在屏幕上打印相同的PIDterminal@venus.w这只是一个巧合,你看到相同的PID。在我的电脑上,我可以看到两个PID的比例几乎相等。做一件事。输入字符,而不是为
scanf
输入数字,然后按enter键
scanf
将变得疯狂,PID将在一个过程中无限打印。再次输入一个字符,然后按enter键。现在你会看到两个PID都在无限地移动。我在ubuntu上运行我的程序,你的操作系统是什么,也许这取决于操作系统。即使我在ubuntu 11.10上。操作系统应该不重要。你试过输入一个字符而不是我建议的数字吗?