This shell was implemented based off of a skeleton of a simple Linux shell. It acts very much the same way as Terminal on Mac if you are not familiar. It has support for simple job control (such as foreground and background jobs) along with some simple I/O redirection. We make great use of signals and signal handlers to make sure our parent and child processes work in sync to avoid any race conditions or bugs WITHOUT using busy loops or sleep (this includes user input such as Ctrl-C or Ctrl-Z).
Please contact me in the case that you would like to see the full implementation and please do not share this private page. This is due to CMU’s academic integrity policy.
Language and Tools:
Written in C, GDB, Valgrind