for () l oop после разветвления останавливает создание дочернего элемента - PullRequest
0 голосов
/ 04 апреля 2020

У меня проблема с форком в моей системе с этой программой:

# include <assert.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/stat.h>
# include <sys/types.h>
# include <fcntl.h>
# include <sys/wait.h>
# include <string.h>

int main()
{
    int i;
    for( i=0; i<5;i++)
    {
        fork();
        printf("getpid():%i",getpid());
        for( i=0; i<10;i++)
        {   
            printf("%i\t",i);
        }
    }
    return 0;
}

Я бы хотел, чтобы он несколько раз форкнулся и сделал секунду для l oop в каждом дочернем форке. Но первое «для» l oop, кажется, блокируется при первом процессе ветвления.

Я получаю только этот вывод:

getpid():45200  1   2   3   4   5   6   7   8   9getpid():45210 1   2   3   4   5   6   7   8   9

Вместо всех других выходных данных, которые обычно должны быть напечатано детьми, если они правильно выполнили второе «для» l oop.

1 Ответ

0 голосов
/ 04 апреля 2020

Программа работает нормально. Используйте разные переменные в 2 циклах для итераций. Кроме того, слегка отредактированные операторы печати для удобства чтения.

# include <assert.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/stat.h>
# include <sys/types.h>
# include <fcntl.h>
# include <sys/wait.h>
# include <string.h>

int main()
{
    int i;
    for( i=0; i<5;i++)
    {
        fork();
        printf("getpid():%i ",getpid());
        for(int j=0; j<10;j++) //Use variable j instead of i.
        {
            printf("%i\t",j);
        }
        printf("\n");
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...