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.