Natürlich muß es trotzdem möglich sein, zwischen child und parent zu unterscheiden, da sonst beide Prozesse genau die gleiche Aufgabe erledigen würden.
Der Hauptunterschied ist, daß der child-Prozess als parent process ID die Kennung des parent-Prozesses hat.
Eine häufige Anwendung von fork ist, im Kindprozess einfach mittels exec ein anderes Programm zu starten.
Beispiel:
/* * fork.c - ein fork beispielprogramm * * oliver schoenbrunner * * 26.4.1999 * */ #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(int argc, char **argv) { int new_process; new_process = fork(); if (new_process<0) fprintf(stderr, "error beim Aufruf von fork()\n"); if (new_process==0) { fprintf(stdout, "Kindprozess koennte zB ein anderes Programm starten (mittels exec())\n"); fprintf(stdout, " Child: PID : %d\n", getpid()); fprintf(stdout, " Child: PPID : %d\n", getppid()); } if (new_process>0) { fprintf(stderr, "Elternprozess setzt das Programm fort\n"); fprintf(stdout, " Parent: PID : %d\n", getpid()); fprintf(stdout, " Parent: PPID: %d\n", getppid()); } return 0; }
Die verschiedenen Varianten von exec unterscheiden sich hauptsächlich dahingehend, auf welche Art Parameter in das neue Programm üebergeben werden.