Roubando e reconectando um processo em execução [duplicado]

3

É domingo e deixei uma instância de R em execução no escritório. O script acabou de ser executado e eu gostaria de salvar meu espaço de trabalho sem ir ao escritório. Eu posso ssh para o computador, mas eu não corri o programa na tela.

Existe uma maneira, sobre o ssh, de rejeitar o processo (não tenho acesso a jobsid do terminal em que o programa está rodando!) e reconectá-lo com, digamos, reptyr? Reptyr e reptyr -T não funcionam sem antes rejeitar o processo

28845 3diag       20   0  139.3m  10.4m   0.0  0.1   0:12.06 S  '- urxvtd                                                                                      
 5327 3diag       20   0   16.4m   4.6m   0.0  0.1   0:00.02 S      '- bash                                                                                    
 5335 3diag       20   0 3499.3m 3.244g   0.0 43.3 171:57.89 S          '- R 

A parte única da minha pergunta é que eu explicitamente exijo desanexar um programa sem ter acesso ao terminal em que ele foi criado.

    
por Three Diag 01.05.2016 / 13:21

1 resposta

2

A invocação de reptyr é suficiente para desanexar o terminal, mas tem que ser

sudo reptyr -T $PID

De man reptyr :

-T

Use an alternate mode of attaching, "TTY-stealing".

In this mode, reptyr will not ptrace(2) the target process, but will attempt to discover he terminal emulator for that process' pty, and steal the master end of the pty.

This mode is more reliable and flexible in many circumstances (for instance, it can attach all processes on a tty, rather than just a single process).

However, as a downside, children of sshd(8) cannot be attached via -T unless reptyr is run as root. See ⟨https://blog.nelhage.com/2014/08/new-reptyr-feature-tty-stealing/⟩ for more information about tty-stealing.

    
por 01.05.2016 / 15:10

Tags