Anexando um processo a um terminal no LInux

6

Eu tenho um arquivo aberto em vi em execução em um terminal ( xterm ), se eu fechar o terminal diretamente sem primeiro fechar o arquivo, então eu posso ver o vi ainda em execução 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 meu trabalho no arquivo. Eu também tentei o comando fd , mas ele falha.

    
por Ravi Gupta 13.12.2010 / 06:41

4 respostas

3

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 .

    
por 13.12.2010 / 23:15
0

Você pode usar o GDB para anexar um processo em execução a um terminal.

Aqui está uma descrição espalhada por várias respostas a uma pergunta (especialmente a que é apresentada por Mirek):

link

    
por 13.12.2010 / 07:43
0

Você pode tentar a tela GNU . É feito para este propósito.

Screen is a full-screen window manager that multiplexes a physical terminal between several processes, typically interactive shells

    
por 13.12.2010 / 07:13
-1

Não há maneira de fazer isso. Apenas mate o processo desanexado. Se você quiser fazer isso intencionalmente, dê uma olhada no comando 'screen'. Isso não salvará você se o shell subjacente morrer.

    
por 14.01.2011 / 13:17

Tags