Como alterar SYSIN e SYSOUT (modo de curses) para um processo em segundo plano para outra sessão de terminal (utilitário de tela)?

1

Atualmente, executo um processo em segundo plano iniciado por um processo deamon. Não tem terminal e funciona bem, pois não possui tela de i / o. É iniciado através de um script de shell que eu posso mudar. O shell script herda o ambiente do daemon, configura variáveis de ambiente adicionais e finalmente inicia o programa via exec $PROG arg1 "arg 2" 1>&2 .

Para executar isso na tela "debug mode", é necessário o i / o (modo curses).

O que eu tentei até agora:

  • exec screen -dmS FIXME $PROG arg1 "arg 2" resulta em um programa que não inicia com a mensagem de erro "descritor de arquivo inválido"
  • exec $PROG arg1 "arg 2" 1>/dev/pts/5 resulta em um programa inicial, toda saída pode ser vista em / dev / pts / 5, claro que a entrada não é possível
  • exec $PROG arg1 "arg 2" 1>/dev/pts/5 <namedpipe resulta em um programa inicial, toda saída pode ser vista em / dev / pts / 5, recebe entrada via echo stuff > namedpipe de outra sessão, mas isso não pode ser usado, pois todas as teclas de função precisam ser utilizáveis.

A solução "óbvia" que pensei (mas não funcionou):

  • inicie uma tela em outro console screen -dmS "FIXME"
  • deixe o processo em background usar esta sessão de tela via exec screen -S "FIXME" -X stuff "$PROG arg1 \"arg 2\" " (a nova linha é necessária, ele emula pressionando a tecla Enter )
  • anexar à tela via screen -r "FIXME" (reconfigurar obras)

Problema aqui: Isso envia apenas o comando único para a sessão, o que não funciona porque o ambiente completo está ausente (iniciando com o diretório atual, continuando com todos os ambiente vars). [Edit: postou uma possível solução hack como resposta (a pergunta original ainda está sem resposta)]

Pergunta: É possível iniciar o processo em segundo plano via utilitário de tela? (A melhor opção seria se a nova sessão de tela fosse iniciada a partir do processo de segundo plano [problema aqui: este processo não tem nenhum console] e simplesmente reconectar de outra janela.

Se isso não for possível: há outras soluções alternativas?

    
por Simon Sobisch 12.07.2016 / 17:32

1 resposta

0

Não responde à pergunta original, mas provavelmente funciona na maioria dos casos:

  • armazena tudo do ambiente que parece importante para um arquivo temporário
  • envie os seguintes comandos para a tela: mude para o diretório, crie o arquivo temporário, remova o arquivo temporário, inicie o programa

Código:

   rm some_env.$$
   for e in $(env | grep "PATH\|WHATEVERISIMPORTANT")
   do 
      echo "$e" >> some_env.$$
   done
   exec screen -S "FIXME" -X stuff "cls
cd $(pwd)
. some_env.$$
rm . some_env.$$
$PROG arg1 \"arg 2\"
"
    
por 13.07.2016 / 08:44