Em geral, os aplicativos que demoram muito para serem executados e o dosent requer interação do usuário são enviados para o segundo plano para que possamos continuar nosso trabalho no terminal.
As tarefas em segundo plano são tratadas da mesma forma que as tarefas em primeiro plano, exceto que as variáveis STDOUT, STDIN e STDERR.
Se você tiver um trabalho demorado, como compactação de arquivos ou backup, poderá enviar esses trabalhos para o segundo plano.
Você pode listar os trabalhos em execução em segundo plano usando o comando jobs
.
$ ./job1.sh &
[1] 9747
$ ./job2.sh &
[2] 9749
$ ./job3.sh &
[3] 9751
$ jobs
[1] Running ./job1.sh &
[2]- Running ./job2.sh &
[3]+ Running ./job3.sh &
Aqui, sempre que um trabalho é enviado para o background shell, é exibido o job id
e pid
do processo. Se quisermos que o processo volte ao primeiro plano, podemos usar o comando fg
para trazê-lo de volta.
$ fg 1
./job1.sh
Mas esteja ciente de que quando você fechar o terminal (shell), o SIGHUP será enviado para todo o processo em segundo plano que é gerado a partir do shell, fazendo com que esses processos morram. Para evitar isso, você pode usar o comando disown
para remover esse processo da tabela de tarefas e, assim, evitar que o processo seja morto.
a melhor maneira é iniciar o processo em segundo plano com o comando nohup
para que os sinais SIGHUP não matem o processo e ele será executado em segundo plano.
Impedir que o SIGHUP seja enviado para processos filhos (tarefas bg) também pode ser evitado configurando a opção huponexit
do shell bash.
$ shopt -s huponexit
Esta opção é configurada por padrão nas versões mais recentes do Bash, mas se ela não estiver definida, podemos adicionar isso ao ~/.bashrc
para torná-lo um comportamento padrão.