Pergunta

Como eu iria 'anexar' a / terminal exibição do console para uma saída aplicações para que eu possa ver o que ele pode estar dizendo?

Como eu separar uma saída aplicações sem matar a aplicação?

Normalmente, se você acender uma aplicação falante usando a linha de comando que você começa a ver todos os tipos de saída maravilhosa. No entanto, digamos que eu tenho uma programação especialmente falador em execução, como Kino, e eu quero exibir sua saída a qualquer momento sem reiniciá-lo através da linha de comando. Não posso; pelo menos eu não sei como.

Foi útil?

Solução

Existem algumas opções aqui. Um deles é para redirecionar a saída do comando para um arquivo e, em seguida, usar 'cauda' para ver novas linhas que são adicionados a esse arquivo em tempo real.

Outra opção é lançar o seu dentro do programa de 'tela', que é uma espécie de aplicação Terminal baseado em texto. sessões de tela pode ser anexado e individual, mas são nominalmente destinado somente para ser usado pelo mesmo usuário, por isso, se você quiser compartilhá-los entre os usuários, é um grande pé no saco.

Outras dicas

Eu acho que tenho uma solução mais simples aqui. Basta olhar para um diretório cujo corresponde ao PID nome que você está procurando, sob o pseudo-sistema de arquivos acessível sob o caminho /proc. Então se você tem um programa em execução, cujo ID é 1199, cd para ele:

$ cd /proc/1199

Em seguida, procure o diretório fd debaixo

$ cd fd

Este diretório fd segure o arquivo-descritores objetos que seu programa está usando (0: stdin, 1: stdout, 2: stderr) e apenas tail -f o que você precisa - neste caso, stdout):

$ tail -f 1

Eu estava procurando exatamente a mesma coisa e descobri que você pode fazer:

strace -ewrite -p $PID

Não é exatamente o que você precisava, mas é muito perto.

Eu tentei a saída redirecionamento, mas que não funcionou para mim. Talvez porque o processo estava escrevendo a uma tomada, eu não sei.

Como eu iria 'anexar' um consola / terminal de-vista de um saída de aplicações para que eu possa ver o que pode-se dizer?

Sobre esta questão, eu sei que é possível pegar a saída, mesmo quando você não lançar comando sceen antes de lançar o processus.

Embora eu nunca tentei, eu encontrei um artigo interessante que explica como fazer usando GDB (e sem reiniciar o processo).

redirecionando-saída-a-executar-processo

Basicamente:

  1. Verifique a lista de arquivos abertos para o seu processo, graças ao / proc / xxx / fd
  2. Anexar o seu processo com GDB
  3. Enquanto ele estiver em pausa, perto do arquivo que você está interessado, chamando close () Função (você pode qualquer função de seu processo em GDB. Eu suspeito que você precisa depurar símbolos em seu processo .. )
  4. Abra a um novo arquivo de chamar a função create () ou open (). (Dê uma olhada nos comentários, no final, você verá pessoas sugerem a utilização dup2 () para garantir o mesmo identificador estará em uso)
  5. Separar o processo e deixar em execução.

A propósito, se você estiver executando um sistema operacional Linux em i386 caixa, os comentários estão falando sobre uma melhor ferramenta para a saída de redirecionamento para um novo console: 'retty' . Se assim for, considerar a sua utilização.

Eu queria assistir remotamente um processo yum atualizar que tinha sido executado localmente, por isso, enquanto havia provavelmente maneiras mais eficientes de fazer isso, aqui está o que eu fiz:

watch cat /dev/vcsa1

Obviamente você gostaria de usar vcsa2, vcsa3, etc., dependendo de qual terminal estava sendo utilizado.

Enquanto minha janela do terminal era da mesma largura que o terminal que o comando está sendo executado em, eu podia ver um instantâneo de sua saída de corrente a cada dois segundos. Os outros comandos recomendado em outros lugares não funcionou particularmente bem para a minha situação, mas que se fez o truque.

Para mim, isso funcionou:

  1. Faça login como o proprietário do processo (mesmo root é negado permissão)

    ~$ su - process_owner
    
  2. Tail o descritor de arquivo como mencionado em muitas outras respostas.

    ~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top