Tl; dr:
Por que o sleepprocesso pode sobreviver quando eu saio e o terminal é fechado? Na minha opinião, tudo, exceto daemons e nohupprogramas, será morto durante o logout. Se sleeppuder sobreviver dessa maneira, isso significa que eu posso usar esse método em vez do nohupcomando?
A menos que a bashinstância gerada sshtenha a huponexitopção definida, nenhum processo será encerrado por qualquer meio ao sair / sair e, quando a huponexitopção for definida, o uso kill -9no shell não será uma boa alternativa ao uso nohupnos processos filhos do shell; nohupnos processos filhos do shell ainda os protegerão de SIGHUPs que não saem do shell, e mesmo quando isso não nohupfor importante, ainda será o preferido, pois permite que o shell seja finalizado normalmente.
Em bashhá uma opção chamada huponexit, que se conjunto vai fazer bashSIGHUP seus filhos ao sair / logout;
Em instâncias interativas de não logon bash , como em uma bashinstância gerada por gnome-terminal, essa opção é ignorada; se huponexitestá definido ou não, bashos filhos de SUNUPUP nunca serão ASSOCIADOS bashao sair;
Nas instâncias de logon interativo bash, como em uma bashinstância gerada por ssh, essa opção não é ignorada (no entanto, é desativada por padrão); se huponexitfor definido, bashos filhos de SIGHUP serão buscados bashao sair / sair; se não estiver definido huponexit, bashos filhos de SIGHUPped não serão encontrados bashapós a saída / logout;
Portanto, em geral, sair / sair de uma bashinstância de logon interativo , a menos que a huponexitopção esteja definida, não tornará o shell SIGHUP seus filhos e sair / sair de uma bashinstância de não-logon interativo não fará o shell SIGHUP seus filhos independentemente;
Isso é, no entanto, irrelevante neste caso: o uso kill -9 sleepsobreviverá independentemente, porque matar o processo pai ( bash) não permitirá que o último faça algo com o anterior (por exemplo, se a bashinstância atual for uma bashinstância de login) e a huponexitopção foi configurada para SIGHUP it).
Além disso, diferentemente de outros sinais (como um sinal SIGHUP enviado para bash), um sinal SIGKILL nunca é propagado para os processos filhos de um processo, portanto, sleepnem é morto;
nohupinicia um processo imune aos sinais SIGHUP, que é algo diferente; impedirá que o processo seja interrompido com a recepção de um sinal SIGHUP, que nesse caso pode ser recebido pela bashinstância de logon interativo, caso a huponexitopção tenha sido definida e o shell seja encerrado; portanto, tecnicamente, o uso nohuppara iniciar um processo em uma bashinstância de logon interativo com a huponexitopção desabilitada impedirá que o processo seja interrompido na recepção de um sinal SIGHUP, mas sair / sair do shell não será SIGHUP independentemente;
No entanto, em geral, quando nohupé necessário para impedir que sinais SIGHUP sejam provenientes do shell pai, não há motivo para preferir o kill -9método on parent ao método nohupon child; em vez disso, deve ser o oposto.
Matar o pai usando o kill -9método não deixa uma chance de o pai sair normalmente, enquanto iniciar o filho usando o nohupmétodo permite que o pai seja encerrado por outros sinais, como SIGHUP (para fazer um exemplo que faz sentido no contexto de uma criança começou a usar nohup), o que permite que ela saia normalmente.
&colocará o processo em segundo plano (como daemon) e continuará sendo executado mesmo que você esteja desconectado.