24
Ноя
2022

Как создать несколько процессов потомков от одного родителя и запустить их параллельно?

Пытаюсь понять как рождаются процессы от родителя через fork. Накидал вот такой вот код.

int i;
int it;
pid_t pid[10];

pid[0] = fork();

printf("Parent I:%d\n",getpid());


     for(i = 1; i<=5; i++)
     {
        pid[i] = fork();
        sleep(1 + rand() % 5);
        if (pid[i] ==0){
           printf("CHILD I:%d \n", i);
           exit(0);
        }
        else{
          wait(&ut);
        }
      }
    
       return 0;
 }
 

В выводе у меня принтуется PID родителя(возможно это вообще не нужно и неправильно), и после вызывается последовательно 5 потомков:

  CHILD I:1
  CHILD I:2
  CHILD I:3
  CHILD I:4
  CHILD I:5

Вопрос, правильно ли я вообще запустил процесс наследования от одного родителя и как запустить эти процессы параллельно с задержкой, например:

  CHILD I:5
  CHILD I:4
  CHILD I:1
  CHILD I:2
  CHILD I:3

Вроде получилось сделать как нужно, но все еще есть сомнения по поводу асинхронных выполнений процессов

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

int main() {
FILE *inputFile;
inputFile = fopen("in.txt", "r");
char charsArray[128];
int i;
int it;
int t;
pid_t pid[10];

printf("Parent I:%d\n",getppid());
printf("__________\n");
srand(time(NULL));
if (inputFile == NULL) {
    perror("Error while opening file");
    }
else {

    for(i = 1; i<=10; i++)
    {
        t = 1 + rand() % 7;
        pid[i] = fork();

        if (pid[i] ==0){
            sleep(t);
            printf("CHILD I:%d Time: %d\n", i, t);
            exit(0);
        }
    }
wait(&it);
sleep(7);
fclose(inputFile);
}
return 0;
}

Вот вывод:

 Parent I:3696
 __________
 CHILD I:1 Time: 1
 CHILD I:6 Time: 1
 CHILD I:7 Time: 1
 CHILD I:3 Time: 2
 CHILD I:2 Time: 3
 CHILD I:8 Time: 3
 CHILD I:10 Time: 4
 CHILD I:4 Time: 5
 CHILD I:5 Time: 6
 CHILD I:9 Time: 7

Источник: https://ru.stackoverflow.com/questions/1470686/%D0%9A%D0%B0%D0%BA-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C-%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D0%B2-%D0%BF%D0%BE%D1%82%D0%BE%D0%BC%D0%BA%D0%BE%D0%B2-%D0%BE%D1%82-%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE-%D1%80%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8F-%D0%B8-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D1%8C-%D0%B8%D1%85-%D0%BF%D0%B0%D1%80%D0%B0%D0%BB

Тебе может это понравится...

Добавить комментарий