Como informar a sessão de tela para regenerar seu soquete?

1

Observação: a situação descrita aqui é completamente diferente de essa .

Eu tenho algumas sessões de tela ainda anexadas , mas screen -list produz

% screen -list
No Sockets found in /tmp/uscreens/S-jones.

Eu tentei enviar SIGCHLD sinais para o processo de tela, e eu também matei alguns shells rodando sob eles (na esperança de que isso fizesse o kernel enviar algum sinal para esses processos). A teoria por trás de tudo isso é que esses sinais causariam screen a recriar os soquetes apropriados em /tmp/uscreens . Mas nenhuma dessas coisas funcionou.

Como as sessões ainda estão anexadas, há algo que eu possa fazer dentro de cada sessão para que ela gere novamente os soquetes apropriados?

    
por kjo 18.02.2015 / 21:55

1 resposta

1

Isso aconteceu comigo quando fiz uma atualização que alterou o padrão SCREENDIR com várias sessões ativas. Como você, eu não poderia convencê-lo a regenerar o fifo (provavelmente há um relatório de bug que vale a pena arquivar em algum lugar), então o que acabei fazendo foi usar reptyr para fazer a transição de tudo o que for relevante para uma nova sessão. É tedioso, mas me permitiu preservar meu estado (assim como aprender um pouco). Aqui estão os passos que usei; isso provavelmente pode ser simplificado ou com script:

  1. Encontre a tela PID que você deseja fazer a transição e obtenha sua lista de processos filhos (usei pstree -ps $PID )
  2. Para cada processo filho, obtenha seu PID e ...
    • Se for uma concha ...
      • sem mais nada em execução, reptyr $PID
      • com um processo normal em execução, SIGTSTP it (^ z ou kill -TSTP $PID ), bg it, disown $PID it e reptyr $PID; fg .
    • Se houver um processo com crianças , reptyr -T $PID
    • Se houver um processo normal, reptyr $PID

Isso pode não ser infalível, e acabei com shells-in-shells e coisas assim, mas poderia ser pior.

    
por 20.02.2015 / 16:31