Процессы отец сын дети форо / трубы

У меня есть предложение создать процесс с трубами, и я построил 20 детей. Оно работает! Но самое сложное - это выполнить следующие требования:

Мне нужно создать внука для каждого ребенка с парным номером (2-й, 4-й, 6-й, ..) и, наконец, я должен создать прапрадеда для каждого внука, который делится на 6. (6-й внук, 12-й, 18-й. )

Извините, но я новичок в unix и параллельных процессах. Вот мой простой код как основа для старта.

Код:

#include <unistd.h>
#include <sys/types.h>
main(){
pid_t pid;
int i, n=20;

for (i=0; i<n; i++) {
 pid=fork();
 if (pid == 0) break;
}
printf(“\n The father in the process %d is %d”, getpid(),getppid());
}

person user2924989    schedule 16.11.2013    source источник


Ответы (1)


Не проверено, но я думаю, что это то, что вы хотите:

#include <unistd.h>
#include <sys/types.h>
main(){
pid_t pid;
pid_t spid;
pid_t sspid;
int i, n=20;

for (i=0; i<n; i++) {
    pid=fork();
    if (pid == 0){
        // Son process
        if(i%2 == 0){
            //Son process && even
            spid = fork();
            if (spid == 0){
                // Grand son process
                if(i%3 == 0){
                    sspid = fork();
                    if (sspid == 0){
                        // Great grand son process
                    } else {
                        // Grand son process
                    }
                }
            }
        }
        break; // to avoid continuing the for in the child processes
    } else {
        // Main process
    }
 }
 printf(“\n The father in the process %d is %d”, getpid(),getppid());
}
person Lajos Veres    schedule 16.11.2013
comment
Привет еще раз!! Я тестировал его, но все еще не запускается. Я скомпилировал его, и это ошибка: неопределенная ссылка на fork () и неопределенная ссылка на getpid () - person user2924989; 17.11.2013
comment
В Windows это может помочь: stackoverflow.com/questions/13643278/ В Linux я не думаю, что вы могли бы получить эту ошибку. О других операционных системах понятия не имею. - person Lajos Veres; 17.11.2013