No Bash, o comando disown
emitido por si removerá os processos em segundo plano (via bg
ou &
) da tabela de tarefas ativa e os marcará para não receber um SIGHUP ao efetuar logout.
Você também pode ignorar um ou mais trabalhos, como disown 1 3
. O sinal disown -h
é útil se você deseja manter os trabalhos na tabela, mas ainda não SIGHUP no logout.
Você pode visualizar a tabela de trabalhos emitindo o comando jobs
. Após um plano de fundo bem-sucedido, ele mostrará [1]+ command &
. Depois de rejeitar um trabalho, ele não deve mais ser exibido na tabela de tarefas e não deve mais ser eliminado no logout. Ainda é possível visualizar o processo via ps ux
, top
e outros utilitários de visualização de processos.
Após o cancelamento de um trabalho, você pode esperar que ele termine naturalmente ou envie um sinal via kill
para o PID para interrompê-lo.
Como o Bash está apenas removendo o trabalho da lista de trabalhos em execução para encerrar e os identificadores de arquivo para stdout e stderr do seu terminal ainda estão abertos, você continuará recebendo a saída do trabalho até que o dispositivo terminal seja fechado (quando logout).
Exemplos:
# we start a command in the background
$ cat /dev/urandom > test &
[1] 18533
# we see our command is still running
$ jobs
[1]+ Running cat /dev/urandom > test &
# we disown the backgrounded job
$ disown 1
# notice it is no longer in the job table
$ jobs
Eu costumo usar apenas disown
se eu executar um comando potencialmente longo como rsync
ou cp
e depois decidir que eu preciso fazer logout sem terminá-lo. Se você sabe que vai executar um comando e efetuar logout, pode capturar a saída por canalização ou tee
it em um arquivo, executá-lo com nohup
ou executá-lo em screen
(o que permite para retomar a posse do comando / terminar depois).
Exemplos:
# capture stdout and stderr to separate logs
cat /dev/urandom >stdout.log 2>stderr.log
# capture stdout and stderr to the same log, and display to stdout as well
cat /dev/urandom 2>&1 | tee output.log
# run a command under nohup (doesn't require a disown or job control support)
nohup cat /dev/urandom </dev/null