Você pode anexar um depurador a ele para fazer com que o processo ignore o sinal SIGHUP:
gdb --pid="$pid" --batch -ex 'call signal(1,1)' -ex detach
(onde $pid
é o id desse processo). Você também pode estender isso para redirecionar seu stdout / stdin / stderr ..., mas então você pode também olhar para as outras questões referenciadas aqui sobre reconectar um processo a outro terminal (ou search para reptyr
neste site ).
Outra opção seria suspender o processo que alocou e direcionará o pseudo-terminal que está controlando o seu processo java. Dessa forma, ele não morrerá mesmo se a conexão ssh for eliminada e, contanto que o java não grave muito no terminal, ele não será afetado.
Aqui, um teste com um processo sleep
:
$ pstree -sp "$(pidof sleep)"
init(1)───sshd(5701)───sshd(62826)───sleep(62842)
$ kill -s STOP 62826
Agora termine o cliente ssh e, em seguida, sleep
ainda está em execução:
$ ps -fC sleep
UID PID PPID C STIME TTY TIME CMD
root 62842 62826 0 09:50 pts/8 00:00:00 sleep 100
Você desejará retomar esse sshd
quando seu processo Java for encerrado, para que ele possa sair corretamente.