nohup, disown e screen: Mantendo Processos em Execucao Apos o Logout

nohup, disown e screen: Mantendo Processos em Execucao Apos o Logout

O Que Voce Vai Aprender

  • Por que processos morrem quando voce fecha o terminal ou a sessao SSH
  • Como usar nohup, disown e screen para manter processos vivos apos o logout
  • Quando usar cada ferramenta

Referencia Rapida

Situacao Ferramenta
Iniciar um comando que sobrevive ao logout nohup cmd &
Desanexar um job ja em execucao disown %1
Manter uma sessao completa e reconectar depois screen ou tmux

Por Que Processos Morrem Quando Voce Faz Logout?

Quando voce fecha um terminal ou perde uma conexao SSH, o shell envia SIGHUP (Signal 1: Hangup) para cada processo em sua tabela de jobs. O handler padrao de sinal encerra o processo, entao jobs em background morrem junto com o shell.

$ sleep 300 &
[1] 12345
$ exit   # shell encerra → SIGHUP enviado ao sleep → PID 12345 termina

As tres ferramentas abaixo cortam o caminho de entrega do SIGHUP em camadas diferentes.

nohup — Use Antes de Iniciar

nohup ("no hangup") inicia um comando com SIGHUP ignorado desde o comeco.

$ nohup long-job.sh &
  • & e opcional mas idiomatico — execucao em background e a intencao usual
  • STDOUT e STDERR sao automaticamente redirecionados para nohup.out no diretorio atual
  • Especifique um arquivo de log personalizado para evitar que nohup.out cresca indefinidamente:
$ nohup ./deploy.sh > /var/log/deploy.log 2>&1 &

Descarte a saida totalmente quando nao precisar dela:

$ nohup ./job.sh > /dev/null 2>&1 &

nohup apenas bloqueia SIGHUP — ele nao daemoniza completamente o processo. Apos o shell encerrar, o processo continua vivo mas e reparentado para init (PID 1).

disown — Use Apos Iniciar

disown remove um job da tabela de jobs do shell para que SIGHUP nao seja mais entregue quando o shell encerrar. Use quando esqueceu de prefixar com nohup.

# Verificar jobs em execucao
$ jobs
[1]+  Running    long-job.sh &

# Remover job 1 da tabela de jobs
$ disown %1

# Remover todos os jobs
$ disown -a

disown -h marca o job para nao receber SIGHUP sem remove-lo da lista de jobs — voce ainda pode ve-lo com jobs.

$ disown -h %1

Recuperando Quando Esqueceu do nohup

# 1. Se o job esta em foreground, suspenda-o primeiro
Ctrl+Z
[1]+  Stopped    ./deploy.sh

# 2. Retome em background
$ bg %1
[1]+ ./deploy.sh &

# 3. Corte a entrega do SIGHUP
$ disown %1

# 4. Seguro fechar o terminal

screen — Persistir a Sessao Inteira

screen e um multiplexador de terminal que virtualiza toda a sessao do terminal. O recurso principal e desanexar e reconectar — desconecte, feche seu laptop, reconecte de outra maquina e encontre sua sessao exatamente onde a deixou.

# Criar uma sessao nomeada e entrar nela
$ screen -S mysession

# Faca seu trabalho dentro do screen
# Desanexar sem encerrar (screen continua vivo em background)
Ctrl+A D

# Reconectar de outro terminal ou sessao SSH
$ screen -r mysession

# Listar todas as sessoes
$ screen -ls

Atalhos Comuns do screen

Acao Tecla
Desanexar Ctrl+A D
Nova janela Ctrl+A C
Proxima janela Ctrl+A N
Janela anterior Ctrl+A P
Encerrar sessao exit na ultima janela

screen vs tmux

tmux oferece mais recursos e um sistema de configuracao mais flexivel. Se tmux esta disponivel no seu servidor, prefira-o. Veja Introducao ao tmux para uma comparacao. Use screen quando tmux nao estiver disponivel ou voce quiser a configuracao mais simples possivel.

Escolhendo a Ferramenta Certa

Ferramenta Quando Observacoes
nohup cmd & Antes de iniciar Simples, integrado, saida vai para nohup.out
disown Apos iniciar Esqueceu nohup — sem arquivo de log criado automaticamente
screen / tmux Ambos Desanexar/reconectar, multiplas janelas, compartilhamento de sessao

Erros comuns a evitar

  • Executar um job em background sem nohup e depois fechar o terminal — SIGHUP o encerra
  • Pressionar Ctrl+D dentro de uma janela screen pensando que "fechou" o screen — voce encerrou a sessao; use Ctrl+A D para desanexar
  • Deixar nohup.out crescer sem limite — sempre especifique um caminho de log ou redirecione para /dev/null

Proximas Leituras