Можно ли определить порядок выполнения fork ()?

Я работаю над упражнением по учебнику «Концепции операционных систем, 7-е издание», и я немного не понимаю, как fork () работают. Насколько я понимаю, fork () создает дочерний процесс, который выполняется одновременно со своим родителем. Но тогда как нам точно узнать, какой процесс запускается первым? Я имел в виду порядок выполнения.

Проблема
Напишите программу на C, используя системный вызов fork () , который генерирует последовательность Фибоначчи в дочернем процессе. Номер последовательности будет указан в командной строке.

Это мое решение:

#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void display_fibonacci_sequence( int n ) {
    int i = 0;
    int a = 1;
    int b = 1;
    int value;
    printf( "%d, %d, ", a, b );
    for( ;i < n - 2; ++i ) {
        value = a + b;
        printf( "%d, ", value );
        a = b;
        b = value;
    }
    printf( "\n" );
}

int main( int argc, char** argv ) {
    int n;
    pid_t pid;
    pid = fork();
    if( argc != 2 ) {
        fprintf( stderr, "Invalid arguments" );
        exit( -1 );
    }
    n = atoi( argv[1] );

    if( pid < 0 ) {
        fprintf( stderr, "Fork failed" );
        exit( -1 );
    }
    else if( pid == 0 ) {
        display_fibonacci_sequence( n );
    }
    else { // parent process
        // what do we need to do here? 
    }
}

Если честно, я не вижу никакой разницы между использованием fork и неиспользованием fork . Кроме того, если я хочу, чтобы процесс родительский обрабатывал ввод от пользователя, а дочерний процесс ] обрабатывал отображение, как я могу это сделать?

15
задан jam 1 October 2012 в 09:52
поделиться