Mover um programa iniciado na tela GNU para outro terminal

21

Eu quero finalizar uma instância do GNU screen enquanto preservo o processo que está sendo executado dentro dele.

Então eu abri meu programa emulador de terminal e executei a tela. Então usei essa instância de screen para executar ./script_x.sh . Agora, por qualquer motivo, eu quero sair usando screen no entanto script_x.sh ainda não completou sua tarefa e não estou disposto a perder meu progresso.

Posso manter o processo ativo ativo para continuar trabalhando nele dentro do meu emulador de terminal comum?

    
por tjt263 18.03.2016 / 09:42

3 respostas

31

TLDR: Resposta prática: Não.

Resposta mais longa:

Em teoria, você pode. Se você iniciou algo como nohup myprog & de dentro da tela, ele continuará em execução. Ele irá ignorar um sinal de desligamento e não terá nenhuma entrada, mas na teoria você pode continuar trabalhando com ele.

Na prática, este não é o caso. Assim, a menos que você queira anexar um depurador ao processo em execução e reescrever seus identificadores de arquivo e garantir que o processo manipule os sinais -1 ao fechar a tela ... a resposta é não.

Se você está pronto para fazer isso, eu tenho um marcador em casa apontando para [SU] onde alguém fez exatamente isso . Salvo por awesomeness, não porque é fácil e trivial fazer.

    
por 18.03.2016 / 09:50
23

Você pode tentar usar o reptyr para reativar o aplicativo já em execução no terminal diferente. No entanto, há alguns problemas com o envio do processo para o plano de fundo.

Acabei de testá-lo (inicie htop dentro de screen , reptyr para outro terminal, mate screen ) e ele pareceu funcionar bem. Ainda é uma solução realmente hacky, então não há garantias.

    
por 18.03.2016 / 10:59
14

Sim (se "matar" não estiver realmente matando), é exatamente para isso que a tela serve. Você deve verificar o manual e tentar qual deles atende às suas necessidades:

C-a d
C-a C-d     (detach)      Detach screen from this terminal.

C-a D D     (pow_detach)  Detach and logout.

Então, você precisará das opções de linha de comando -D / -d -R / -r na tela, dependendo da sua escolha.

    
por 18.03.2016 / 09:54