This project is a Unix implementation of a small shell, allowing the user to access most Unix commands within their filesystem. This smallsh uses C's system API to manually change current directories "cd", print the last exit status or "status", or close the current shell program "exit." The first image demonstrates these functions, successfully changing the directory, getting a correct exit status for commands using "wc," and exiting from the program when using "exit." The shell also uses functions such as execvp() in order to implement more generic Unix commands, such as "ls" and "wc" shown in the first image. These commands can also have their input and output redirected to files, which is demonstrated with the second image. "wc" creates a file to replace outputting to the terminal when instructed. smallsh is capable of running background processes, as shown in the third image. Normal command execution for Unix prevents the user from placing additional commands while running, as shown by the garbage text queuing up while "sleep 5" runs. However, backgrounding a long-running process using the "&" tag will allow the user to continue using the terminal, and gets notified when the backgrounded processes finish executing. Said backgrounded processes are all kept track of in order to intermittently check when they finish execution. Note: As this project was done for a class, I will not be publicly hosting the source code. However, I will post the header file for the required structs to give an idea as to how it was implemented. This will be named "Program's Header File."