Tanto quanto sei, há duas situações que podem fazer com que um processo seja eliminado após ser protegido por nohup
e cada situação tenha uma solução diferente.
Uma possibilidade, que não parece ser o caso aqui, é que o sistema usa systemd onde logind.conf
está configurado com KillUserProcesses=yes
. Neste caso, fechar o terminal não causará problemas, mas o logout do sistema irá causar problemas. A solução alternativa neste caso é usar
$ systemd-run --scope --user [command]
Isso basicamente diz ao systemd que ele não deve matar o processo.
A outra possibilidade é que o processo gerado implemente seu próprio manipulador para SIGHUP
, que substitui a proteção de nohup
. Nesse caso, problemas ocorrerão assim que o shell for fechado, mesmo se você permanecer conectado. Você pode verificar isso com:
$ nohup [command] &
$ grep Sig /proc/$!/status
Você deve ver uma linha
SigIgn: 0000000000000001
(ou alguma outra seqüência de dígitos hexadecimais). SIGHUP
é o número de sinal 1
, portanto, se esse número hexadecimal big-endian tiver seu primeiro conjunto de bits (menos significativo) (isto é, o dígito final é um de 1, 3, 5, 7, 9, B, D, ou F), então SIGHUP
é ignorado. Caso contrário, o programa instalou seu próprio manipulador, sobrescrevendo a proteção de nohup
.
Nesse caso, a solução é usar disown
:
nohup [command] & disown
Isso remove o processo da lista de tarefas do shell, evitando que SIGHUP
seja enviado em primeiro lugar.