Comando nohup: como usar, nohup.out e manter a execução depois de fechar o terminal

Ambiente de testeFamília RHELAlmaLinux 9.8coreutils 8.32conta rootDebian 12 · coreutils 9.1 conta comumVerificado em 2026-11-05
Comandos de processos · agendamentonohupLocalização/usr/bin/nohup
Continua rodando mesmo depois de fechar o terminal

Para que uma tarefa continue rodando mesmo se você fechar o terminal ou a conexão SSH cair, execute-a com o comando nohup. O nohup executa o comando fazendo com que ele ignore o sinal de desconexão (SIGHUP) que chega quando o terminal é fechado. Quando um sleep com nohup e outro sem nohup foram iniciados juntos em um servidor AlmaLinux 9 e o terminal foi fechado, só o iniciado com nohup continuou rodando.

A saída abaixo vem de um servidor AlmaLinux 9.8 (conta root) e de um servidor Debian 12 (conta comum). No lugar de uma tarefa longa foi iniciado um sleep, e para encerrá-lo foi indicado só o PID recebido ao iniciar. Os horários estão em UTC.

1️⃣ Como usar o comando nohup

  • ↪️ O & no final e o que acontece ao fechar o terminal

O nohup vai antes do comando a executar, e o & no final do comando define a execução em segundo plano. Segundo o manual oficial do GNU, o nohup em si não manda o comando para segundo plano, então sem o & o prompt só volta quando o comando termina.

nohup sleep 300 &
[1] 3431609
nohup: ignoring input and appending output to 'nohup.out'

[1] é o número da tarefa e 3431609 é o PID do processo iniciado. A mensagem que veio em seguida avisa que a entrada do teclado não será lida e que a saída será acrescentada ao arquivo nohup.out.

O PID da tarefa que você acabou de iniciar fica em $!. Confira com [echo $!] logo depois de iniciar e anote: esse mesmo número serve para ver o estado ou para encerrar a tarefa.

echo $!
3431609

Quando o terminal é fechado, o shell recebe o sinal de desconexão e manda o mesmo sinal para as tarefas que iniciou (segundo o manual oficial do Bash). Para conferir isso, em um terminal novo foram iniciados juntos [nohup sleep 300 &] e, sem nohup, [sleep 301 &].

sleep 301 &
[2] 3432892
jobs -l
[1]- 3432883 Running                 nohup sleep 300 &
[2]+ 3432892 Running                 sleep 301 &

Com as duas tarefas em Running, a janela do terminal foi fechada e os dois PIDs foram conferidos com ps a partir de outro shell.

ps -p 3432883,3432892 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3432883 S          00:05 sleep 300

Só sobrou o sleep 300, iniciado com nohup; o sleep 301, iniciado sem nohup, terminou junto com o fechamento do terminal.

Um processo iniciado com nohup é como um celular no modo Não perturbe.

O nohup é um comando do pacote coreutils. A versão instalada aparece na primeira linha do --version. O servidor AlmaLinux 9.8 tinha a 8.32 e o servidor Debian 12, a 9.1.

nohup --version | head -1
nohup (GNU coreutils) 8.32
nohup --version | head -1
nohup (GNU coreutils) 9.1

2️⃣ nohup.out e redirecionamento da saída

  • ↪️ Definir um arquivo de log e /dev/null

Se você não definir para onde vai a saída, o nohup acrescenta a saída do comando ao nohup.out da pasta atual. O nohup.out recém-criado tinha 0 byte e permissões -rw-------, de leitura e escrita só para o usuário que o criou.

ls -l nohup.out
-rw------- 1 root root 0 Oct 28 23:04 nohup.out

O manual oficial do GNU explica que o nohup cria o nohup.out de modo que só o usuário que o criou possa ler e gravar nele, independentemente da configuração de umask. Se não conseguir gravar na pasta atual, grava em $HOME/nohup.out na pasta pessoal, e se também não conseguir gravar lá, não executa o comando.

Quando um comando com saída foi executado com nohup, a saída ficou no nohup.out depois que o comando terminou.

nohup sh -c 'echo start; sleep 2; echo end' &
[1] 3431985
nohup: ignoring input and appending output to 'nohup.out'
cat nohup.out
start
end
[1]+  Done                    nohup sh -c 'echo start; sleep 2; echo end'

O Done da última linha é o aviso do shell de que a tarefa terminou. O nohup.out não é criado de novo a cada execução, e sim continuado no final do mesmo arquivo; por isso, se você iniciar várias tarefas na mesma pasta, as saídas se misturam em um só arquivo.

Para separar o log de cada tarefa, defina o arquivo de saída com > e mande também a saída de erro para o mesmo arquivo com 2>&1.

nohup sh -c 'echo start; sleep 300' > job.log 2>&1 &
[1] 3432059
cat job.log
nohup: ignoring input
start

Com o 2>&1 junto, o terminal mostrou só o número da tarefa e o PID, e o aviso do nohup [nohup: ignoring input] foi gravado na primeira linha do arquivo de log.

Se você colocar só o > e tirar o 2>&1, aparece no terminal um aviso de que a saída de erro está sendo redirecionada para o arquivo da saída padrão.

nohup sleep 300 > job2.log &
[2] 3432097
nohup: ignoring input and redirecting stderr to stdout

A saída de tarefas que você não precisa guardar vai para /dev/null. Nesse caso também, o terminal mostrou só o número da tarefa e o PID.

nohup sleep 300 > /dev/null 2>&1 &
[3] 3432137

A tabela abaixo mostra, para as quatro formas de execução, para onde foi a saída e qual mensagem apareceu no terminal.

Forma de execuçãoPara onde vai a saídaMensagem no terminal
nohup comando &nohup.out da pasta atualnohup: ignoring input and appending output to 'nohup.out'
nohup comando > arquivo &Arquivo indicado (com a saída de erro)nohup: ignoring input and redirecting stderr to stdout
nohup comando > arquivo 2>&1 &Arquivo indicadoNenhuma (o aviso fica na primeira linha do arquivo)
nohup comando > /dev/null 2>&1 &DescartadaNenhum

3️⃣ Verificar e encerrar processos nohup

  • ↪️ jobs, ps, kill

A lista do jobs mostra só as tarefas iniciadas no shell atual; por isso, depois de fechar o terminal e se conectar de novo, confira o processo nohup com ps -p indicando o PID. Enquanto estiver no mesmo shell, jobs -l mostra juntos o número da tarefa, o PID e o estado.

jobs -l
[1]+ 3431609 Running                 nohup sleep 300 &

Se você colocar um PID depois de ps -p e escolher as colunas com -o, aparece só a linha desse processo. O S em STAT indica que ele está dormindo à espera de um evento, e ELAPSED é o tempo desde que começou.

ps -p 3431609 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3431609 S          00:03 sleep 300

Para encerrar, use kill seguido do PID.

kill 3431609

O kill não mostrou nada e, ao rodar jobs em seguida, a tarefa apareceu como Terminated e depois saiu da lista.

jobs
[1]+  Terminated              nohup sleep 300

Ao rodar ps de novo com o mesmo PID, apareceu só o cabeçalho, o que confirmou que o processo tinha terminado.

ps -p 3431609 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD

O nohup ignora só o sinal de desconexão, então mandar esse mesmo sinal diretamente com [kill -HUP] não encerra o processo. O kill -HUP foi enviado ao sleep 305, iniciado com nohup, e ao sleep 306, iniciado sem nohup.

kill -HUP 3437119 3437128

Na verificação seguinte com jobs -l, só o do nohup continuou em Running, e o sleep 306 terminou com Hangup.

jobs -l
[1]- 3437119 Running                 nohup sleep 305 &
[2]+ 3437128 Hangup                  sleep 306

Se você não indicar um sinal ao kill, ele envia SIGTERM; por isso uma tarefa iniciada com nohup também termina com [kill PID].

4️⃣ Comando nohup comparado ao disown e opções

  • ↪️ disown -h, quando escolher o tmux e resumo das opções

🔲 nohup comparado ao disown

O disown é um comando interno do bash usado em tarefas já iniciadas: serve para desligar depois, do sinal de desconexão do terminal, uma tarefa iniciada com & mas sem nohup. O disown não redireciona a saída para o nohup.out; por isso, em tarefas com saída, defina para onde ela vai com > arquivo ao iniciar.

Segundo o manual oficial do Bash, o disown sem opções tira a tarefa da lista do jobs, enquanto o disown -h a mantém na lista e só impede que o sinal de desconexão chegue a ela. Primeiro foi iniciado o sleep 302 e depois executado o disown.

sleep 302 &
[1] 3433230
disown

O disown não mostrou nada, e o jobs -l executado logo em seguida também deu resultado vazio.

jobs -l

Em seguida foi iniciado o sleep 303 e executado disown -h no número de tarefa %1.

sleep 303 &
[1] 3433343
disown -h %1

Ao conferir com jobs -l, a tarefa continuava na lista.

jobs -l
[1]+ 3433343 Running                 sleep 303 &

Foi iniciado ainda mais um sleep 304, sem nenhum tratamento, o terminal foi fechado e os três PIDs foram conferidos a partir de outro shell.

sleep 304 &
[2] 3433474
ps -p 3433230,3433343,3433474 -o pid,stat,etime,cmd
    PID STAT     ELAPSED CMD
3433230 S          00:11 sleep 302
3433343 S          00:08 sleep 303

As duas tarefas com disown e disown -h ficaram, e só o sleep 304, sem tratamento, terminou. Comparando os quatro métodos:

MétodoQuando usarLista do jobsDepois de fechar o terminalSaída
nohup comando &Ao iniciarFicaFicanohup.out ou arquivo indicado
comando & e depois disownDepois de iniciarPuladaFicaNão muda
comando & e depois disown -hDepois de iniciarFicaFicaNão muda
Só comando &—FicaEncerradoNão muda

Para trabalhos em que você precisa trazer a tela da sessão de volta e continuar digitando, o certo é um multiplexador de terminal como o tmux; para trabalhos que você inicia uma vez e dos quais só recebe o resultado em um arquivo, o nohup basta.

🔲 Opções do comando nohup

📌 Principais opções: resultados deste artigo

OpçãoTarefaResultado neste artigo
--versionMostra as informações de versão e saiServidor AlmaLinux 9.8: nohup (GNU coreutils) 8.32; servidor Debian 12: nohup (GNU coreutils) 9.1

📎 Outras opções: segundo o manual oficial

OpçãoTarefa
--helpMostra a ajuda e sai

🔲 Simulador do comando nohup

No simulador abaixo, você pode iniciar uma tarefa com nohup, fechar o terminal e se reconectar com o chip 🔌 e ver por conta própria quais processos ficam.

Simulador do comando nohupcoreutils 8.32
[root@server work]#
Funciona só dentro do navegador e não inicia processos reais. O tempo do sleep corre pelo relógio real, e ↑↓ trazem de volta os comandos digitados antes.

🔢 FAQ & conteúdo recomendado

Segundo o manual oficial do GNU, o nohup sai com 125 se o próprio nohup falhar, 126 se o comando foi encontrado mas não pôde ser executado e 127 se o comando não foi encontrado. Em um servidor AlmaLinux 9, digitar só nohup sem comando deu 125, ./job.sh sem permissão de execução deu 126 e o comando inexistente nosuchcmd deu 127.

O nohup não muda o valor nice; por isso use nice junto, como em [nohup nice -n 10 sleep 307 &]. Ao conferir com ps o sleep iniciado assim, a coluna NI mostrou 10 e STAT mostrou SN, com o N que indica prioridade baixa.

O comando nohup tem só duas opções, [--help] e [--version]. Segundo o manual oficial do GNU, as opções vêm antes do comando a executar.

ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 9   +   3   =