In this assignment you are required to develop a program that will act as a simple shell, similar to the bash shell in UNIX. Your shell must perform the following:
Display a prompt, e.g., my_shell$
Accept a command entered by the user by using *fgets()* (**do not use** *gets()*)
Execute the command by invoking the *fork()* and *execvp()* system call
If the command cannot be executed, display the appropriate system error message (use *perror()* for this purpose)
If logout is typed, the shell should exit
Extend the shell to allow a process to redirect *stdout* to the *stdin* of a second process. That is, implement a pipe. Use the standard pipe operator "|". For example, as mentioned above, the command "sort filename" will alphabetically sort each line of a text file, and write the sorted output to stdout. However, "sort filename | head" will alphabetically sort each line of the text file, and write the sorted output into a pipe using *stdout*.
Again extend the shell to support invoking a command in either foreground or background mode. The user should be able to run a command in the background by placing an extra "&" at the end of the command line, e.g., "sleep 1000 &" to manage whether a command is running in the foreground or background, you must use the *wait()* system call (**do not use** *waitpid()*). The shell should also support multiple background jobs up to a maximum of 10. The command “jobs?? should be implemented to display the currently executing background processes PID numbers and the command line from which it was invoked.
All the above mentioned should be in one program.
## Deliverables
1) Complete and fully-functional working program in executable form as well as complete source code of all work done.
2) Complete ownership and distribution copyrights to all work purchased.
## Platform
The program must run on Linux.