В чем причина этого вывода при создании дочернего процесса? - PullRequest
0 голосов
/ 07 июля 2019

Как и в заголовке, почему я получаю этот вывод при создании дочернего процесса?В частности, почему вдруг дочерний оператор print или родительский оператор печати иногда будет печататься быстрее другого?

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 Ответ

1 голос
/ 07 июля 2019

Как я отмечал в комментарии :

Чередующийся вывод является следствием алгоритма планирования в ядре системы, на которой вы работаете, в сочетании с тем, что еще работает. Эти два процесса могут выполняться одновременно, и на большинстве современных компьютеров с несколькими ядрами фактически выполняются одновременно. Когда вывод любого из процессов появляется на экране, зависит от факторов, находящихся вне вашего контроля. Для каждого процесса его собственные выходы будут появляться в последовательности (таким образом, CHILD 0 появляется перед CHILD 1, а PARENT 0 появляется перед PARENT 1 и т. Д.), Но когда выходы одного процесса появляются по отношению к другому, чаще всего неопределенный.

...