fork.c
/**
* @file fork.c
* @author mmalensek
*
* Demonstrates the fork() and exec() system calls, parent and child processes.
*/
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
int
main(void)
{
int my_pid = getpid();
printf("Starting up, my PID = %d\n", my_pid);
int child = fork();
if (child == -1) {
/* Something went wrong */
printf("fork failed!\n");
} else if (child == 0) {
/* If fork() returns 0, this process is the child */
int my_pid = getpid();
sleep(2); // what happens if we remove this?
printf("Hello from the child! PID = %d.\n", my_pid);
char *cmd[] = { "ls", "/", 0 };
exec(cmd[0], cmd);
printf("Hi world!\n"); /* Will this print? */
sleep(5);
} else {
/* If fork() returns a nonzero number, this process is the parent,
* AKA the original process that called fork(). */
int my_pid = getpid();
printf("Hello from the parent! PID = %d\n", my_pid);
printf("PID %d waiting for its child (%d)!\n", my_pid, child);
int status;
wait(&status);
printf("Child exited. Return = %d. Parent exiting.\n", status);
}
return 0;
}