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.


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 .


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.