switch(fork())
case -1: perror
case 0: costam
default: fork(); fork();
Zakładając, że każda z operacji forkowania nie zwróci błędów to 5 (domyślam się, że jest break między poszczególnymi opcjami w switchu).
Małe wyjaśnienie:
1. Program trafia na switch wykonuje operację fork co daje dwa procesy i w każdym sprawdza wartość jaką zwróciła funkcja fork().
2. Dla procesu potomnego (dziecka) fork() zwraca 0, czyli wykonuje się "costam" (dalej zakładam, że jest tam break i program wychodzi z konstrukcji switch).
3. Dla procesu, który wywoływał funkcję fork() zwraca identyfikator procesu dziecka, czyli wykonuje się sekcja default, gdzie mamy znowu funkcję fork(), dając łącznie 3 procesy.
4. W dwóch procesach potomnych, które powstały po uruchomieniu sekcji default, jest kolejna funkcja fork(), po której wywołaniu powstają dwa nowe procesy, dając łącznie liczbę 5.