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.