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.