Este post pode ajudar. A recomendação é:
- fundo do processo (com Ctrl-Z e depois bg )
- execute disown -h% [jobid] (provavelmente um bash-ism, então você terá que traduzir para o tcsh)
A má notícia , é claro, é que o BG precisaria ser feito no mesmo shell em que o processo está sendo executado ... mas ... já pode estar em segundo plano.
A notícia realmente ruim é que a chamada rejeitada pode precisar ser feita no mesmo shell. Nesse caso, sim, você está ferrado. Mas não tenho certeza, talvez a raiz possa forçá-lo a desconectá-lo.
Hmm. Possíveis boas notícias - o tcsh renuncia automaticamente:
Se o tcsh sair anormalmente, ele rejeitará os trabalhos executados em segundo plano automaticamente quando sair.
Portanto, se seu processo de longo prazo já estiver em segundo plano, matar seu pai tcsh deve permitir que ele continue. O processo agora está desconectado do terminal inicial. (Caso contrário, consulte "más notícias" acima.)
Infelizmente, não é tela, então não há uma reconexão real. Você pode falsificá-lo com gdb, talvez (novamente, desde o primeiro link):
[...] com alguns hacks sujos, não é impossível reabrir um processo 'stdout / stderr / stdin.
Portanto, você ainda pode criar uma janela de tela em branco (por exemplo, que executa o modo de suspensão).
E então use o gdb, por exemplo, para se conectar ao processo, faça algumas chamadas de fechamento (0)
chamada de fechamento (1)
chamada de fechamento (2)
chamada de abertura ("/ dev / pts / xx", ...)
chamada de dup (0)
chamar dup (0)
desanexar
A saída do processo iria para a tela. Ele não seria anexado ao terminal da tela, então, por exemplo, [sic] mataria o comando "sleep", não o processo, mas isso poderia ser suficiente para o OP.
Gostaria de saber se não deve haver "call dup (1)" e "call dup (2)" nesse processo também ...