Como exibir a sessão já em execução? [duplicado]

9

É uma boa prática executar processos longos em screen session, para protegê-los de interrupções de sessão. Mas o que devo fazer se já tiver um processo em execução e apenas esquecer de executar screen ? É possível "capturar" a sessão atual de alguma forma e protegê-la com screen ?

    
por Illarion Kovalchuk 21.11.2012 / 14:57

3 respostas

1

Você quer dar uma olhada no programa retty. A página inicial é link

A idéia é redirecionar seu stdin / stderr / stdout, o que você pode fazer com o gdb, mas esse programa minúsculo torna muito mais fácil fazê-lo. Não é perfeito, mas deve fazer o trabalho.

    
por 21.11.2012 / 17:03
1

Além dos já mencionados retty e reptyr , neercs e injcode também oferece a funcionalidade.

    
por 21.11.2012 / 23:18
0

Não realmente.

O mais próximo que você pode conseguir é:

Inicie uma nova janela de tela, execute:

trap '' INT HUP
exec sleep 99999999

nele. Registre o tty para essa janela ( $tty ).

Use lsof para descobrir quais fds de quais processos na sessão estão abertos para o tty atual.

Com o gdb, anexar a cada processo na sessão, execute call signal(1,1) para ignorar os SIGHUPs. Para o líder da sessão, você provavelmente precisará fazer um call dup2(0,1023) (assumindo que 0 esteja aberto no tty) para manter um fd aberto no terminal antigo. Então, para cada processo, faça

set variable $fd = open("the-screen-window-tty",2)

Então para cada fd que estava aberto no terminal antigo, faça:

call dup2($fd, that-fd)

E então:

call close($fd)
detach

A sessão anexada ao novo terminal seria aquela com o processo de "suspensão" como líder (e somente processo), como redimensionamento de janela, CTRL-C, CTRL-Z, controle de tarefa, / dev / tty não vai funcionar e provavelmente alguns efeitos colaterais mais desagradáveis eu não penso.

Se no Linux, reptyr , criado por @angus em um comentário à sua pergunta, automatiza esse processo e corrige as deficiências acima, criando um novo arquivo e fazendo com que seja controlado pelo processo que você deseja migrar. No entanto, ele suporta apenas a migração de um processo AFAICT.

    
por 21.11.2012 / 16:47

Tags