Como Executar Comandos Bash em Segundo Plano no Linux

Não há nada mais irritante do que executar um comando no seu terminal e ele rodar por minutos, às vezes horas, e não poder usar seu terminal novamente. Claro, você pode usar abas, mas essa é uma solução desajeitada, e nem sempre é ideal porque você pode querer ver atualizações enquanto trabalha. Aqui mostramos algumas maneiras diferentes de executar comandos bash em segundo plano no Linux.
Leia também: Como Usar o Comando lsof no Linux para Listar Arquivos Abertos
Finalizar um Comando com &
Se você quiser empurrar um comando para o segundo plano, usar & no final é uma maneira fácil de fazer isso. Dessa forma, você pode emitir um comando em segundo plano e continuar usando seu terminal enquanto ele é executado. No entanto, vem com uma pegadinha. Usar & não desconecta o comando de você; apenas o empurra para o segundo plano. Isso significa que enquanto você tenta usar o terminal, qualquer coisa que o comando queira enviar para STDOUT ou STDERR ainda será impressa, o que pode ser distrativo.

COMMAND &Quando a sessão do terminal é fechada, o comando termina. Você também pode matar o comando emitindo o comando jobs, encontrando o número do comando que está em execução e matando-o com o comando kill. Essa sintaxe é a seguinte:

kill %1Usar & é bom se você precisar empurrar algo para longe por um tempo, mas não espere que continue para sempre.
Leia também: Como Usar o Comando dd no Linux
& Após um Comando, Depois Desconectá-lo
Executar um comando apenas com & o empurra para trás e o mantém em execução enquanto a janela do terminal estiver aberta. Se, no entanto, você está procurando manter esse comando em execução de forma constante, mesmo com sua sessão de terminal terminando, você pode usar o comando disown.
Para usar esse método, comece adicionando um &.
COMMAND &Como mencionado acima, usar & empurra esse comando para o segundo plano, mas não o desanexa do seu usuário. Você pode verificar isso digitando jobs no terminal. Ele mostrará o comando em execução em segundo plano, como vimos antes.
Basta digitar disown no shell, e ele fará exatamente isso. (E você pode mais uma vez verificar isso com o comando jobs.)

Agora você pode fechar seu terminal e continuar seu dia. Ele ainda continuará enviando coisas para STDOUT ou STDERR, mas uma vez que você saia e reabra seu terminal, não verá nada lá. Você pode encontrar o comando novamente com os comandos top ou ps e matá-lo com o comando kill.

Leia também: Como Usar o Comando Rm no Linux
& Após um Comando com /dev/null
Adicionar & após um comando empurrará um comando para o segundo plano, mas como resultado, o comando em segundo plano continuará a imprimir mensagens no terminal enquanto você o utiliza. Se você está procurando evitar isso, considere redirecionar o comando para /dev/null.

COMMAND &>/dev/null &Isso não impede que o comando feche quando o terminal fecha. No entanto, como mencionado acima, é possível usar disown para desanexar o comando em execução do usuário. Você também pode matá-lo em qualquer um dos métodos mencionados acima se não quiser que ele continue a ser executado.
Leia também: O Guia Definitivo para os Comandos Apt e Apt-Get
Nohup, com & e /dev/null
Diferente dos comandos anteriores, usar nohup permite que você execute um comando em segundo plano e o mantenha em execução. Como? nohup ignora o sinal HUP (sinal de desligamento), tornando possível executar comandos em segundo plano mesmo quando o terminal está desligado. Combine esse comando com redirecionamento para “/dev/null” (para evitar que nohup crie um arquivo nohup.out), e tudo vai para o segundo plano com um comando.
nohup COMMAND &>/dev/null &
Leia também: Como Gerar Certificados SSL no Linux Usando OpenSSL
A maioria dos programas de terminal no Linux hoje possui recursos integrados para permitir que eles sejam executados em segundo plano com pouco esforço. Além disso, sistemas init modernos (como systemd) podem permitir que os usuários iniciem programas como serviços na inicialização ou sempre que necessário.
Ainda assim, alguns programas no Linux carecem da capacidade de serem executados como um daemon ou de se integrarem com sistemas init modernos. Isso é um verdadeiro inconveniente, mas é compreensível, já que nem todos os desenvolvedores têm a habilidade ou o tempo para adicionar novos recursos.
Felizmente, comandos como nohup ou disown ainda são uma realidade e podem fechar a lacuna em mover programas como este para o segundo plano. Eles não são perfeitos ou sofisticados, mas fazem o trabalho quando necessário.
Se você gostou deste artigo sobre Linux, não deixe de conferir alguns de nossos outros conteúdos sobre Linux, como como conectar sua conta do Google ao GNOME Shell, as melhores distribuições Linux para usuários do Windows e os comandos LS que você precisa conhecer.
Leia também: Como Usar cURL para Transferência de Dados na Linha de Comando e Mais