Rularea comenzilor Bash în fundal în modul corect [Linux]

Executar comandos Bash em segundo plano da maneira certa [Linux]

⌛ Reading Time: 4 minutes

Todo mundo já esteve lá: você quer executar um programa de terminal e mantê-lo em execução. O problema é que este programa é antigo ou não inclui um recurso que permite que ele seja executado como um daemon em segundo plano. Felizmente, existem várias maneiras de forçar os programas a funcionarem em segundo plano.

O Bash pode fazer isso sozinho, e programas extras não precisarão ser instalados. Este artigo abordará várias maneiras de colocar programas de terminal em segundo plano e mantê-los lá. Cada método listado é bom para seu próprio caso de uso especial.

Terminar um Comando com &

Se você quiser colocar um comando em segundo plano, usando & no final, é uma maneira fácil de fazer isso. Mas vem com um problema. Usando & não desconecta o comando de você; ele apenas o coloca em segundo plano para que você possa continuar usando um terminal.

Quando a sessão do terminal é fechada, o comando termina. Usando & é bom se você precisa adiar algo um pouco, mas não espere que continue para sempre.

& Depois de um comando, então rejeite-o

Executando um comando com apenas & empurra-o para trás e o mantém funcionando enquanto a janela do terminal estiver aberta. Se, no entanto, você deseja manter este comando em execução constante, mesmo com o término de sua sessão de terminal, você pode usar o disown comando.

Para usar este método, primeiro comece adicionando um &.

Como mencionado acima, usando & coloca este comando em segundo plano, mas não o separa do usuário. Você pode verificar isso digitando jobs no terminal. Ele mostrará o comando em execução em segundo plano.

bash-background-disown-jobs

Basta digitar disown no shell, e fará exatamente isso (e você pode mais uma vez verificar isso com o jobs comando).

& Após um Comando com / dev / null

Adicionando & após um comando, o colocará em segundo plano, mas, como resultado, o comando em segundo plano continuará a imprimir mensagens no terminal à medida que você o estiver usando. Se você está procurando evitar isso, considere redirecionar o comando para /dev/null.

bash-background-dev-null

Isso não impede o comando de fechar quando o terminal é fechado. No entanto, como mencionado acima, é possível usar disown para rejeitar o comando em execução longe do usuário.

Nohup, com & e / dev / null

Ao contrário dos comandos anteriores, usando nohup permite que você execute um comando em segundo plano e o mantenha em execução. Como? O Nohup ignora o sinal do HUP (sinal de desligamento), possibilitando a execução de comandos em segundo plano, mesmo com o terminal desligado. Combine este comando com redirecionamento para /dev/null (para evitar que o nohup crie um arquivo nohup.out), e tudo vai para o segundo plano com um comando.

bash-background-no-hup

Conclusão

A maioria dos programas de terminal no Linux hoje tem recursos integrados para permitir que sejam executados em segundo plano com pouco esforço. Junto com isso, os sistemas init modernos (como o systemd) podem permitir aos usuários iniciar programas como serviços na inicialização ou a qualquer hora.

Ainda assim, alguns programas no Linux não têm a capacidade de rodar como um daemon ou se integrar com sistemas init modernos. Isso é um inconveniente real, mas é compreensível, pois nem todos os desenvolvedores têm a habilidade ou 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 segundo plano. Eles não são perfeitos nem sofisticados, mas realizam o trabalho quando necessário.

Como você coloca programas de terminal em execução em segundo plano? Conte-nos abaixo!

Crédito da imagem: Um terminal – quatro telas