O processo iniciado a partir de um shell tem um TTY de controle associado a eles que herdam do shell e também pertencem a um grupo de processos. Ao executar vários processos em um canal com | ou usando notação subshell com () , todos esses processos são iniciados com o mesmo grupo de processos. Quando o usuário pressiona o pressionamento de tecla suspenso, normalmente Ctrl-Z do teclado, a camada TTY envia o sinal SIGTSTP para todos os processos no grupo de processos atual em primeiro plano e o shell pai é ativado com um SIGCHLD (ou retorna de sua chamada para wait() ) para manipular o TTY novamente. O shell é responsável por controlar qual grupo de processos está em primeiro plano para controlar o TTY e o próprio shell reside em seu próprio grupo de processos.
Se um processo não fizer parte do atual grupo de processos de primeiro plano para o TTY, ele será parado automaticamente pela camada TTY com um SIGTTIN se ele tentar ler do terminal. Por exemplo, enviar SIGCONT para um editor de texto interativo como o vim irá retomá-lo, mas ele receberá imediatamente um SIGTTIN assim que chamar read() para obter o próximo pressionamento de tecla do teclado. O shell deve ser notificado com a diretiva de controle de trabalho fg que deve mover o vim para o grupo de processos em primeiro plano antes de retomar, removendo, assim, o shell de estar em primeiro plano.