fork()-множественные процессы и системные вызовы

Я пишу программу mapreduce, которая использует несколько каналов ввода/вывода (по одному каналу на процесс)для получения окончательных результатов. У меня проблема с созданием процессов. В частности, я получаю следующую ошибку:

wait error: Interrupted system call

Это мой код, который порождает процессы:

while (values[inc]!=NULL) //provided array of text lines
{
    if ((pid = fork()) == -1) {
        perror("fork error");
        exit(EXIT_FAILURE);
    }    

    else if (pid == 0) {             /* start of child process      */
        printf("Child process...\n");
        /* pipes[inc][1] is a file descriptor to which myMap writes some data
           using the write() system call
           mr is a struct that holds other function pointers */
        mr->myMap(pipes[inc][1],values[inc]); 
        exit(0);
    }
    else {                           /* start of parent process     */
        printf("Parent process...\n");

        if ((wpid = wait(&status)) == -1)
        /* Wait for child process.      */  
            perror("wait error");
        else {                       /* Check status.                */
            if (WIFSIGNALED(status) != 0)
                printf("Child process ended because of signal %d\n",
                       WTERMSIG(status));
            else if (WIFEXITED(status) != 0)
                printf("Child process ended normally; status = %d\n",
                       WEXITSTATUS(status));
            else
                printf("Child process did not end normally\n");
        }
        //close(fd[1]);

        printf("Parent process ended\n");
    }
    inc++;
}

После этого я создаю один поток

pthread_t newThread;
pthread_create(&newThread,NULL,threadFunction,values);
pthread_join(newThread,NULL);

Функция threadFunction использует функцию select(), чтобы узнать, какой дескриптор файла готов для чтения и читает его и помещает данные в словарь.

При запуске формы отладчика gdb программа выводит:

Parent process...
Child process...
wait error: Interrupted system call
Parent process ended
Parent process...
Child process ended normally; status = 0
Parent process ended
Parent process...
Child process...
Child process...
wait error: Interrupted system call
Parent process ended

Я не знаю, как решить проблему. Какие-либо предложения?

Спасибо!

8
задан Krzysiek 15 April 2012 в 08:30
поделиться