Realmente não sei quais são as vantagens de executar aplicativos em segundo plano.
Algo como Application &
via linha de comando.
Por que exatamente executamos aplicativos em segundo plano e quando devo decidir fazê-lo?
Responder1
Geralmente aplicativos que demoram muito para serem executados e não requerem interação do usuário são enviados para segundo plano para que possamos continuar nosso trabalho no terminal.
Os trabalhos executados em segundo plano são tratados da mesma forma que os trabalhos executados em primeiro plano, exceto que seus STDOUT, STDIN e STDERR variam.
Se você tiver um trabalho que demora muito, como compactação de arquivo ou backup, você pode enviar esses trabalhos para segundo plano.
Você pode listar os trabalhos que estão sendo executados em segundo plano usando jobs
o comando.
$ ./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 shell em segundo plano, exibe o job id
e pid
do processo. Caso queiramos que o processo volte ao primeiro plano podemos usar fg
o comando para trazê-lo de volta.
$ fg 1
./job1.sh
Mas esteja ciente de que quando você fecha o terminal (shell), o SIGHUP será enviado para todos os processos em segundo plano gerados no shell, fazendo com que esses processos morram. Para evitar isso, você pode usar disown
o comando para remover esses processos da tabela de tarefas e, assim, evitar que o processo seja eliminado.
uma melhor maneira é iniciar o processo em segundo plano com nohup
o comando para que os sinais SIGHUP não interrompam o processo e ele seja executado com segurança em segundo plano.
Impedir que o SIGHUP seja enviado para processos filhos (trabalhos bg) também pode ser evitado definindo huponexit
a opção do shell bash.
$ shopt -s huponexit
Esta opção é definida por padrão nas versões mais recentes do Bash, mas caso não esteja definida, podemos adicioná-la ~/.bashrc
para torná-la um comportamento padrão.
Responder2
Se você executar um aplicativo que precisa - digamos 5 minutos para terminar, por exemplo, um trabalho de cópia - o shell será bloqueado enquanto o programa estiver em execução, durante 5 minutos inteiros. O trabalho de cópia fica então no chamado grupo de processos em primeiro plano, indicado por um +
login ps
. Talvez seja necessário fazer algum outro trabalho durante esses 5 minutos, mas o shell está bloqueado.
Por outro lado, quando você executa o trabalho de cópia em segundo plano ( cp source target &
), seu trabalho é executado em segundo plano sem bloquear o shell atual. Você pode continuar com outras coisas. Você pode trazer o processo de volta ao primeiro plano, fg
se desejar.