[Linux][C] Tworzenie dokładnej ilości procesów potomnych


(Damian True) #1

Mam za zadanie stworzyć pętlą for dokładną ilość procesów potomnych wczytując ich ilość z arguemntu. No i mam problem jak to zrobić żeby wywołały się dokładnie np 5 procesów potomnych. Bo cały czas ilość procesów rośnie mi lawinowo.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
 
int main(int argc, char** argv)
{
  int n;
  n = atoi(argv[1]);
  int i=0;
  
  pid_t pidFork;
  
  for(i;i<n ;i++)
  {
    if(fork()==0)
    {
      //dzieci
      pidFork = fork();
      printf("%d\n",getpid());
    }
  }
  return 0;
}

(kostek135) #2

(Damian True) #3

No to od czego jest to POLSKIE forum żeby mi ktoś pomógł po POLSKU a nie przekierowywał na jakieś angielskie strony. Już tak googlowałem ale angielski to nie mój język dlatego zwracam się o pomoc do rodaków.


(Marcineez) #4

Nie zabieraj się za programowanie jeśli nie znasz angielskiego, dobra rada.


(Rolek0) #5

W procesach potomnych wykonują się kolejne obiegi tej pętli. Pierwszy proces tworzy 5 potomnych, każdy z tych potomnych tworzy po 4 następne, itd.

W procesach potomnych powinieneś przerywać tę pętlę.


(kostek135) #6

Ja rozumiem, że nie rozumiesz angielskiego. Ale kodu w języku, którym piszesz też nie? Pierwszy link, pierwsza odpowiedź: http://stackoverflow.com/a/15328368


(Damian True) #7

Dzięki @ Rolek0 już mniej więcej ogarnołem.

int main(int argc, char *argv[])
{
    int n, i, pid;
    int u = getppid();
    
    pid_t proc_id;

    n = atoi(argv[1]);

    for(i = 0; i < n; i++)
    {
        proc_id = fork();

        if(proc_id==0)
        {
            srand(getpid());
            u = 1 + rand()%20;
            sleep(u);
            exit(u);
        }
    }

    if(u == getppid())
    {
        for(i = 0; i < n; i++)
        {
            pid = wait(&u);
        }    
    }
    return 1;
}

@Macineez jest to zła rada, grzecznie mówiąc. Jak by więcej polaków pisało po polsku to nie musiał bym szukać informacji po angielsku no ale co niektórym chyba napisanie kilku zdań po polsku sprawia ból. Ale już nie będę tutaj zmieniał tematu.


(Marcineez) #8

Jak już przestaniesz się bawić, a zaczniesz programować, życie szybko ci zweryfikuje kto miał racje. :slight_smile: