Параллельные процессы в C - PullRequest
1 голос
/ 26 апреля 2011

Как я могу запустить 3 процесса параллельно? Является ли это решение ниже правильным? В моем решении я поместил некоторый код, чтобы увидеть истекшее время, и я думаю, что он настраивается в последовательном режиме. Мне нужно запустить pid1, pid2 и pid3 одновременно.

pid = fork();
if(pid == 0) {
        //code...
    exit(EXIT_SUCCESS);
} else if(pid > 0) {
        pid1 = fork();
        if(pid1 == 0) {
                //pid1 code...
            exit(EXIT_SUCCESS);
    } else if(pid1 > 0) {
            waitpid(pid1, &status, 0);
    } else {
        printf("Fork error %d.\n", errno);
    }

    pid2 = fork();
    if(pid2 == 0) {
                //pid2 code...
        exit(EXIT_SUCCESS);
    } else if(pid2 > 0) {
        waitpid(pid2, &status, 0);
    } else {
        printf("Fork error %d.\n", errno);
    }

    pid3 = fork();
    if(pid3 == 0) {
                //pid3 code...
                exit(EXIT_SUCCESS);
    } else if(pid3 > 0) {
        waitpid(pid3, &status, 0);
    } else {
            printf("Fork error %d.\n", errno);
    }
        waitpid(pid, &status, 0);
}

Ответы [ 3 ]

4 голосов
/ 26 апреля 2011

Вы продолжаете ждать завершения одного ребенка, прежде чем запустить следующий.Попробуйте что-то вроде:

for (int i = 0; i < 3; ++i)
{
    pid = fork();

    if (pid < 0)
        error

    if (pid == 0)
    {
        child does thing
        exit
    }
}

for (int i = 0; i < 3; ++i)
{
    wait(&status);
}

РЕДАКТИРОВАТЬ

Так что просто измените свой код на что-то вроде этого и подождите в конце.

    if (pid2 == 0)
    {
        //pid2 code...
        exit(EXIT_SUCCESS);
    }
    else
        if (pid2 < 0)
        {
            printf("Fork error %d.\n", errno);
        }

   //....same outline for 3, etc.
0 голосов
/ 26 апреля 2011

Ваш вопрос несколько расплывчатый - вы видите 3 параллельных процесса или нет?При написании кода вы сразу выходите из дочернего процесса.

0 голосов
/ 26 апреля 2011

Посмотрите мою программу wrap , в частности код для wrapc. Он дважды разветвляется, запускает одного потомка в wrap, читает, записывает в wrap, затем читает обратно в другом потомке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...