Simulates usage of a Unix shell. See instructions.pdf
to view the project guidelines and commands. The program forks to execute child processes and waits for the process to terminate. It can optionally run the user's process in the background and return to the user to take in more input. It supports use of a single pipe per command.