Emiti a ^z; bg; disown
sequência para permitir que eu fechasse uma sessão ssh na qual estou executando um processo de execução muito importante. Esse processo grava a saída de status no stderr e continua a fazê-lo mesmo após ser desconectado (verificado com lsof, o stderr fd está aberto para r / w).
Existe uma maneira de determinar que o processo foi realmente rejeitado (não recv SIGHUP se o shell recvs um)?
Respostas:
No Bash, o
disown
comando emitido por si só remove processos em segundo plano (viabg
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
. Odisown -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 viaps 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:
Normalmente, eu uso somente
disown
se executar um comando potencialmente de longa duração, como umrsync
ou maiscp
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 canalizandotee
-a para um arquivo, executando-anohup
ou executando-ascreen
(o que permite retomar a propriedade do comando / encerrar posteriormente) )Exemplos:
fonte
detach
um trabalho em segundo plano, ele será desanexado :) não existe realmente um meio termo onde executá-lo em um processo em segundo plano não fará nada. a verificaçãojobs
apenas verifica se você não tentou desanexar um processo parado ou algo assim.