Isso não é possível "de forma limpa". Existem ferramentas como a tela e tmux que criam um terminal virtual remanescente: você pode iniciar seu programa dentro da tela, desanexar a sessão de tela e, posteriormente, reconectar a sessão de tela em um terminal diferente. Mas isso requer planejamento antecipado.
É possível usar ptrace para mexer com os descritores de arquivos do processo para reconectá-los a outro terminal. Isso não funciona de maneira confiável porque pode criar inconsistências nas estruturas de dados do processo: alguns programas não se importam, outros irão falhar. Você pode fazer isso anexando o programa em um depurador e emitindo a sequência correta de chamadas do sistema (pelo menos open
, dup
e close
para cada entrada padrão, saída padrão e erro padrão). Existem várias ferramentas existentes que podem fazer isso, por exemplo, neercs e retty .
Veja também Como posso pausar um processo em execução sobre o ssh, deserdá-lo, associá-lo a um novo shell de tela e cancelar a pausa ? , Exibir script sobre SSH? , Posso nohup / filtrar um processo já iniciado? , Retomar o comando em execução na queda Sessão SSH .