Comando nohup – Executar comandos após sair do shell no Linux

Comando nohup – Executar comandos após sair do shell no Linux

Quando executamos processos no Unix, esses processos podem rodar em foreground (primeiro plano) ou em background (segundo plano). Em um processo foreground, esperamos no terminal o término do processo. Desta forma, não podemos usar o terminal até que o processo tenha terminado. Podemos colocar o processo de primeiro plano em background emitindo os comandos a seguir no terminal:

# Ctrl-z
# bg

Os processos no Unix serão terminados quando você fizer logout do sistema ou quando sair do shell atual, não importando se eles estiverem rodando em foreground ou em background. Eles recebem o sinal HUP (hangup), que é um aviso do terminal a seus processos dependentes de que ocorreu um logout. A única forma de assegurar que um processo que esteja rodando atualmente não seja terminado quando sairmos é usando o comando nohup.

O comando nohup (“No Hangups”) redireciona para a saída padrão. Ele redireciona mensagens para um arquivo chamado nohup.out no diretório a partir do qual o comando foi executado. Portanto, se quísermos executar um script de nome limpa.sh em background a partir do diretório atual, podemos executar o seguinte comando:

$ nohup limpa.sh &

O caractere & diz ao sistema para rodar o comando ou script em background. Caso não o usemos, o comando será executado em primeiro plano.

O comando nohup também possui a opções –help e –version:

–help
Mostra a ajuda do comando e sai

–version
Mostra informações sobre a versão do comando e sai.

Exemplos

Vejamos alguns exemplos de aplicação do comando.

1. Queremos rodar um comando de busca de arquivos no sistema, e sabemos que o comando poderá demorar muito para executar. Não queremos que o comando seja interrompido se por acaso sairmos de nossa sessão, e ele rodará em segundo plano para que o terminal seja liberado. Usaremos então o seguinte comando:

$ nohup find / -iname *.txt &

Será mostrada então a seguinte saída:

Comando nohup no Linux

Na primeiro linha temos o PID do processo e na segunda linha uma mensagem que nos informa que a saída está sendo redirecionada ao arquivo padrão nohup.out. Para vermos o resultado do comando find basta posteriormente abrir esse arquivo e ler seu conteúdo.

Veja que o arquivo nohup.out foi criado:

$ ls no*

Como usar o comando nohup no Linux

E este arquivo contém o resultado do processamento do comando find:

$ cat nohup.out

usando nohup no Linux

2. Mesmo exemplo que o anterior, porém agora queremos redirecionar a saída para um arquivo chamado resultado.odt:

$ nohup find / -iname *.txt > resultado.odt &

Usar nohup no Linux

É isso aí!

Veja também: Comandos ps e pstree – Visualizando processos e threads no sistema Linux

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

2 Comentários em Comando nohup – Executar comandos após sair do shell no Linux

  1. Fabio, excelente explicacao. Estava procurando justamente este comando para fazer um DUMP de um banco MariaDB. Quando desconectava do tty, o backup parava! Serviu PERFEITAMENTE. Adorei a dica.

  2. Wesley Rodrigues // 02/08/2022 em 21:16 // Responder

    Como faço para ‘nohup’ parar de executar no segundo plano?

Escreva um comentário

Seu e-mail não será divulgado


*