Movendo um processo já em execução para Screen


222

Meu trabalho no escritório rotineiramente me vê conectado a uma caixa Linux via VNC.

Às vezes, inicio um trabalho remoto no console e percebo mais tarde que ele executa muito mais tempo do que o esperado. (Deveria ter iniciado aquele em Tela em primeiro lugar ...)

Não quero manter minha estação de trabalho em funcionamento durante a noite apenas para manter a sessão do VNC aberta; Gostaria de mover esse trabalho remoto já em execução para uma sessão Screen (na caixa remota), para poder desligar a estação de trabalho (e reconectar na manhã seguinte).

Como isso pode ser feito?


2
e é uma bobagem, serverfault.com/questions/49877/… - parece que não pode ser feito.
22711 Paul Dixon




Procure pelo script screenify.
Vashu 27/02

Respostas:


217

Dê uma olhada no reptyr , que faz exatamente isso. A página do github tem todas as informações.

reptyr - Uma ferramenta para "re-escrever" programas.

reptyr é um utilitário para pegar um programa em execução existente e anexá-lo a um novo terminal. Iniciou um processo de execução demorada pelo ssh, mas precisa sair e não quer interrompê-lo? Basta iniciar uma tela, use reptyr para pegá-la e, em seguida, mate a sessão ssh e vá para casa.

USO

reptyr PID

"reptyr PID" irá capturar o processo com o ID PID e anexá-lo ao seu terminal atual.

Após a conexão, o processo recebe e grava a saída no novo terminal, incluindo ^ C e ^ Z. (Infelizmente, se você tiver experiência em segundo plano, ainda precisará executar "bg" ou "fg" no terminal antigo. É provável que seja impossível corrigir isso de uma maneira razoável sem corrigir o shell.)


22
Se, como eu, você olhou para o link acima e considerou brevemente instalar o programa a partir da fonte, lembre-se: é apenas uma questão de apt-getdistância nos sistemas Debian.
mlissner

3
Isso funciona muito bem, como eu nunca vi isso antes?
deed02392

3
Isso é incrível! Eu votaria 10 vezes se pudesse! Além disso, o reptyr também está disponível nos repositórios RedHat. Apenas 'yum install' para obtê-lo.
Mark J. Bobak

5
Não funciona, exceto nos casos mais triviais:Unable to attach. (This most commonly means that 11690 has a suprocesses)
Mehrdad 13/08

2
Pelo menos como root, você pode usar #reptyr -T PID
ChristophK

45

Você não pode fazer isso facilmente. Eu sugeriria criar o hábito de iniciar a tela como a primeira coisa que você faz depois de abrir um console.

No entanto, para o seu problema real, há outra coisa que você pode tentar: depois de iniciar o seu trabalho a partir do terminal, coloque-o em segundo plano digitando ctrl-z e depois bg. Depois disso, desanexe o trabalho do seu shell pai; na festança você faria disown -h %<jobid>. Depois disso, você pode fechar o terminal com segurança e o trabalho continuará sendo executado.


3
Isso funcionou muito bem para o meu caso. reptyr e retty falharam ao pegar o processo, mas tudo o que eu precisava era poder fechar um terminal e deixar o processo em execução.
STW

10
FYI: depois de renegar ing o processo pode ser reptyr -ed dentro da tela .
Adam

1
Isso matou meu programa em execução :(
Mehrdad

39

Ao usar o Linux, que tal usar retty dentro do processo de tela recém-lançado?

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw

HTH

Felicidades,


1
Não sabia de retty, obrigado. No entanto, para o tipo de trabalho de longa duração que tenho em mente, estou um pouco relutante em usar uma ferramenta que se refere a si mesma como "muito levemente testada". Eu vou com a solução do conde.

1
não vejo retty no Gentoo
Sergei

não pode anexar ao 4858
Arnold Roa
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.