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.