Portál AbcLinuxu, 13. května 2025 22:59

Dotaz: Procesy v C/C++

13.4.2011 19:05 Honza
Procesy v C/C++
Přečteno: 904×
Odpovědět | Admin
Ahoj chtěl bych se zeptat jak udělám aby hlavni rodicovskej proces pockal na dokonceni vsech child procesů?Chtěl bych aby mi hlavni proces udelal nekolik potomků stejny urovne a pak aby pockal na dokonceni vsech ale nejak se mi to nedari.Pri spusteni se mi vytvori 2 potomci ale pak jeste jeden podproces z toho prvniho potomko a nevim proc. Tady je kod:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
void pracuj(){
printf("Zavolal jsem metodu pracuj\n");
printf("Rodicovsky proces je: %d",(int)getppid());
sleep(5);
printf("Konec metody pracuj\n\n");
}
int main (){
pid_t child_pid;
int status;
printf ("the main program process id is %d\n", (int) getpid ());
for(int i=0;i<2;i++){
child_pid = fork ();
if(child_pid == 0){
printf("vytvoreny potomek %d\n",(int)getpid());
pracuj();
}
}
wait(&status);
printf("Konec programu\n");
return (0);
}


Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.4.2011 19:10 Sten
Rozbalit Rozbalit vše Re: Procesy v C/C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
Funkce pracuj (nebo ta podmínková větev potomka) musí končit exitem, jinak se po skončení vrátí do onoho for cyklu a znovu se forkne.
19.4.2011 21:23 Honza
Rozbalit Rozbalit vše Re: Procesy v C/C++
a jak udělat aby mi ten hlavni proces cekal na vsechny svoje potomky? pokud potomci cekaji vsichni stejne dlouho dobu je tom OK ale kdyz tam dam rozdilnou cekaci dobu tak se hlavni proces ukonci spolu s tim nejrychlejsim
19.4.2011 21:38 Sten
Rozbalit Rozbalit vše Re: Procesy v C/C++
Možností je spousty, namátkou tři (od nejjednoduššího po nejsložitější):
  • Volejte funkci wait tak dlouho, dokud neselže s ECHILD
  • Počítejte, kolikrát uděláte fork, a potom proveďte stejný počet waitů
  • Vytvořte si množinu (vektor, mapu, ...), kam uložíte PID každého dítěte (vrácené forkem), a když wait vrátí nějaké PID, odebrte je z té množiny, takže když bude ta množina prázdná, žádné další dítě není

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.