创建子进程时此输出的原因是什么?

时间:2019-07-06 22:29:23

标签: c child-process

就像标题中所说的那样,在创建子进程时我怎么得到这个输出?具体来说,为什么子打印或父打印语句有时突然比其他打印速度快?

CHILD 0
                        PARENT 14
                        PARENT 15
CHILD 1
                        PARENT 16
CHILD 2
                        PARENT 17
.
.
.
CHILD 191
CHILD 192
CHILD 193
CHILD 194
CHILD 195
CHILD 196
CHILD 197
CHILD 198
CHILD 199
CHILD 200
CHILD 201
CHILD 202
CHILD 203
CHILD 204
CHILD 205
CHILD 206
                          PARENT 206
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
  pid_t pid; /* could be int */
  int i;
  pid = fork();

  if( pid > 0 )
  {
    /* parent */
    for( i=0; i < 1000; i++ )
      printf("\t\t\tPARENT %d\n", i);
  }
  else
  {
    /* child */
    for( i=0; i < 1000; i++ )
      printf("CHILD %d\n", i);
  }
 return (0);
}



1 个答案:

答案 0 :(得分:1)

我在comment中指出:

交错的输出是您正在运行的系统内核中的调度算法以及其他正在运行的算法的结果。这两个进程可以同时运行,并且在大多数具有多核的现代机器上,实际上确实同时运行。屏幕上何时显示任一过程的输出,取决于您无法控制的因素。对于每个进程,其自己的输出将依次出现(因此CHILD 0出现在CHILD 1之前,而PARENT 0出现在PARENT 1之前,依此类推),但是当来自任一进程的输出时相对于对方的出现大多不确定。