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.
6
vi &
separa o processo do terminal existenteRespostas:
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
eclose
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 .
fonte
Podes tentar Tela GNU . É feito para este propósito.
fonte
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 (particularmente ver a de Mirek):
https://stackoverflow.com/questions/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-line
fonte
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.
fonte