Jestem w trakcie nauki lnuxa i zatrzymałem się na programowaniu procesów w C. Dla formalności, system na jakim pracuje to Ubuntu 17.10.
Chciałbym stworzyć takie drzewo procesów:
http://i.prntscr.com/HBs24fGZTtm3V1kVsgxGcw.png
Napisałem kod, który wg mnie jest poprawny. Wygląda on następująco:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
int main() {
printf(“Proces1 PID: %6d PPID: %6d \n”, getpid(), getppid());
if(fork()==0) {
printf("Proces2 PID: %6d PPID: %6d \n", getpid(), getppid());
exit(0);
}
if(fork()==0) {
printf("Proces3 PID: %6d PPID: %6d \n", getpid(), getppid());
if(fork()==0) {
printf("Proces6 PID: %6d PPID: %6d \n", getpid(), getppid());
exit(0);
}
if(fork()==0) {
printf("Proces7 PID: %6d PPID: %6d \n", getpid(), getppid());
if(fork()==0) {
printf("Proces10 PID: %6d PPID: %6d \n", getpid(), getppid());
exit(0);
}
exit(0);
}
exit(0);
}
if(fork()==0) {
printf("Proces4 PID: %6d PPID: %6d \n", getpid(), getppid());
exit(0);
}
if(fork()==0) {
printf("Proces5 PID: %6d PPID: %6d \n", getpid(), getppid());
if(fork()==0) {
printf("Proces8 PID: %6d PPID: %6d \n", getpid(), getppid());
exit(0);
}
if(fork()==0) {
printf("Proces9 PID: %6d PPID: %6d \n", getpid(), getppid());
exit(0);
}
exit(0);
}
}
Po wykonaniu funkcji gcc i uruchomieniu w terminalu uzyskuję takie okno:
Jak widać PPID procesu 5 jest złe, bo powinno być 4464
Procesy 6 i 7 również mają złe PPID
Reszta jest ok. Czy mógłbym prosić o pomoc w rozwiązaniu mojego problemu?
Z góry dziękuję i pozdrawiam
Rafał