Implement a basic Unix-like shell that can execute commands, handle piping, redirection, background processes, and manage signals.