Anexando um processo a um terminal no LInux

6

Eu tenho um arquivo aberto em vi executando em um terminal ( xterm ), se eu fechar diretamente o terminal sem primeiro fechar o arquivo, então eu posso ver o vi ainda correndo em segundo plano ( ps x ). Agora existe alguma maneira de anexar esse processo, ou seja, vi a algum outro terminal para que eu possa continuar o meu trabalho no arquivo. Eu também tentei fd comando mas falha.

Ravi Gupta
fonte
vi & separa o processo do terminal existente
Rafe Kettler
E se, devido a algumas outras razões, meu terminal for morto?
@ Ravi seria em um processo diferente. Então isso não importa.
Rafe Kettler

Respostas:

3

Isso não é possível “de forma limpa”. Existem ferramentas como 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 importarão, outros falharão. Você pode fazer isso anexando o programa em um depurador e emitindo a seqüê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 desmarcá-lo? , Ver script sobre o SSH? , Posso nohup / tela de um processo já iniciado? , Retomar o comando em execução na sessão SSH descartada .

Gilles
fonte
1

Podes tentar Tela GNU . É feito para este propósito.

O Screen é um gerenciador de janelas em tela cheia que multiplexa um terminal físico entre vários processos, geralmente shells interativos.

slhck
fonte
Parece interessante, mas pode se ligar a algo que não foi originalmente iniciado em uma de suas sessões?
-1

Não há como fazer isso. Apenas mate o processo desvinculado. Se você quiser fazer isso intencionalmente, dê uma olhada no comando 'screen'. Isso não irá salvá-lo se o seu shell subjacente morrer.

Belrog
fonte