// Bs1ueb5.c -- Copyright 2005 by Matthias Jauernig
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(void){
	int i, status;
	pid_t pid = fork();
	
	switch(pid){
		case -1:
			perror("fork");
			exit(1);
			break;
		case 0:
			printf("Child  -> Meine PID:  %d\n",(int)getpid());
			printf("       -> Parent-PID: %d\n\n",(int)getppid());
			for(i=0; i<10000000; i++){
				if(i%1000000 == 0)
					printf("Child -Zaehler: %d\n",i);
			}
			break;
		default:
			printf("Parent -> Meine PID:  %d\n",(int)getpid());
			for(i=0; i<5000000; i++){
				if(i%1000000 == 0)
					printf("Parent-Zaehler: %d\n",i);
			}
			pid = wait(&status);
			// im höheren Byte steht Exit-Status, im niedrigeren die Signalnummer
			if(status>255)
				status>>=8;
			printf("Child beendet: %d, Status: %d\n",(int)pid,status);
			break;
	}
	
	exit(1);
}

