Mam za zadanie wywołać funkcję fork
, wypisać informacje o procesach potomnych i wypisać drzewo utworzonych procesów. Napisałem coś takiego:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
void wypiszInfoOProcesie()
{
printf("Identyfikator procesu: %d\n", getpid());
printf("Identyfikator procesu rodzica: %d\n", getppid());
printf("Identyfikator uzytkownika procesu: %d\n", getuid());
printf("Identyfikator grupy przypisanej do procesu: %d\n", getgid());
}
int main()
{
char c;
char cmd[50];
const char* czescKomendy = "pstree -p ";
snprintf(cmd, strlen(czescKomendy)+5+1, "pstree -p %d", pid);
/* Proces matka */
puts("Proces matka");
wypiszInfoOProcesie();
puts("Procesy potomne");
for (int i = 0; i < 3; i++) {
pid = fork();
if (pid == 0) {
/* Funkcja fork zwrocila wartosc 0, a wiec jestesmy w procesie potomnym */
wypiszInfoOProcesie();
}
}
//puts(cmd);
scanf("%c", &c);
system(cmd);
return 0;
}
To jest program na studia więc napisałem go po polsku. W każdym razie napisałem go sam, ale o dziwo nie wiem dlaczego działa. O_o Chodzi mi o końcówkę i wypisywanie tego drzewa procesów.
Skoro trzy razy wywołany został fork
to mamy 2^3=8
utworzonych procesów przy czym każdy z nich wykonuje dalsze instrukcje. Wystarczy raz podać znak na wejście i program tylko RAZ rysuje drzewo, czyli wykonuje tę funkcję system
. Dlaczego zostaje ona wywołana tylko raz skoro te instrukcje wykonuje każdy z procesów?
alagner