No Bash, o disown
comando emitido por si só remove processos em segundo plano (via bg
ou &
) da tabela de tarefas ativas e marca-os para não receberem um SIGHUP no logout.
Você também pode passar um ou mais trabalhos para rejeitar, como disown 1 3
. O disown -h
sinalizador é útil se você deseja manter os trabalhos na tabela, mas ainda não o SIGHUP no logout.
Você pode visualizar a tabela de tarefas emitindo o jobs
comando Após um plano de fundo bem-sucedido, ele será exibido [1]+ command &
. Depois de recusar um trabalho, ele não deve mais ser exibido na tabela de trabalhos e não será mais eliminado no logout. Você ainda pode ver o processo de via ps ux
, top
e outros utilitários de visualização de processos.
Após a rejeição de um trabalho, você pode esperar que ele termine naturalmente ou enviar um sinal kill
para o PID para interrompê-lo.
Como o Bash está apenas removendo o trabalho da lista de trabalhos em execução para finalizar e os identificadores de arquivo do stdout e stderr do seu terminal ainda estão abertos, você continuará recebendo a saída do trabalho até que o dispositivo do terminal seja fechado (quando você sair) .
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
Normalmente, eu uso somente disown
se executar um comando potencialmente de longa duração, como um rsync
ou mais cp
tarde, e decidir que preciso fazer logout sem finalizá-lo. Se você sabe que vai executar um comando e efetuar logout, é possível capturar a saída canalizando tee
-a para um arquivo, executando-a nohup
ou executando-a screen
(o que permite retomar a propriedade do comando / encerrar posteriormente) )
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