#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
pid_t pid;
char * message;
int n;
int exit_code;
printf("fork program starting\n");
pid = fork();
switch(pid)
{
case -1:
printf("fork failed");
exit(1);
case 0:
message = "this is the child";
n =5;
exit_code = 37;
break;
default:
message = "this is the parent";
n=3;
exit_code = 0;
break;
}
for(; n > 0; n--)
{
puts(message);
sleep(1);
}
//wait for the child process exiting
if(pid != 0)
{
int stat_val;
pid_t child_pid;
child_pid = wait(&stat_val);
printf("child has finished: PID = %d\n", child_pid);
if(WIFEXITED(stat_val))
{
printf("Child exited with code %d\n", WEXITSTATUS(stat_val));
}
else{
printf("Child terminated abnormally\n");
}
}
exit(exit_code);
}
[output]
$ cc -o wait wait.c
$ ./wait
fork program starting
this is the parent
this is the child
this is the parent
this is the child
this is the parent
this is the child
this is the child
this is the child
child has finished: PID = 2378
Child exited with code 37