É possível ler a saída de qualquer processo usando seu PID?

32

É possível conectar um terminal a um processo já em execução usando seu PID de maneira semelhante ao uso do fgcomando para trabalhos?

Tommy
fonte
como o quê?! qual é o processo que você deseja anexar ?!
Eu gostaria de ser capaz de ver a saída de um programa que foi iniciado no outro terminal
Tommy

Respostas:

43

Você pode obter os descritores de arquivo padrão desse processo, por exemplo stdout:

tail -f /proc/<pid>/fd/1
Jorge Castro
fonte
8
Eu tentei esta solução com top e parece que não funciona. Em um terminal lancei top e em outro usei seu comando com o pid corrigido, mas não obtive saída.
Tommy
11
Como você faz isso em um mac?
Avner Barr
e o stderr? Eu assumo / proc / <pid> / fd / 2, mas como você obtém stdout / stderr?
Alexander Mills
11
E se este descritor apontar para um soquete? Tail não consegue ler. # ls -la /proc/24510/fd/1 lrwx------ 1 root root 64 Oct 31 08:34 /proc/24510/fd/1 -> socket:[444026]
Imaskar diz Reinstate Monica
8

Existem algumas opções aqui. Uma é redirecionar a saída do comando para um arquivo e, em seguida, usar tailpara exibir novas linhas que são adicionadas a esse arquivo em tempo real.

Outra opção é iniciar o programa dentro dele screen, que é um aplicativo de terminal baseado em texto. As sessões de tela podem ser anexadas e desanexadas, mas são destinadas apenas a serem usadas pelo mesmo usuário, portanto, se você quiser compartilhá-las entre os usuários.

Caso contrário, se desejar, você pode rastrear o processo e ver o que está fazendo strace:

strace -e trace=open -p 22254 -s 80 -o output.txt
  • -p PID: Anexe ao processo com o ID do processo PID e inicie o rastreio.
  • -s SIZE: Especifique o tamanho máximo da sequência a ser impressa (o padrão é 32).
  • -o filename: Grave a saída de rastreamento no nome do arquivo e não na tela (stderr).
Olorin
fonte
Finalmente, não parece funcionar. Lancei top e em outro usei seu comando com o pid corrigido, mas não obtive a saída esperada. Quando eu uso a cauda depois.
Tommy
Você precisa usar sudocom strace para anexar a um processo e usar -o ~/output.txtpara que o arquivo seja deixado na sua pasta pessoal.
Use o arquivo de saída, não envie para a tela! Não seja um idiota como eu era e pressione Ctrl-C para sair do caminho e, em seguida, desconecte meu PID. Me assustou demais em um roteiro importante.
Weston Ganger
3

Você pode usar estes comandos abaixo para anexar um processo em execução em outro terminal:

Exemplo:

screen -S PID
retty $(pgrep PID)
reptyr PID
devav2
fonte
Não consegui encontrar novamente ou tentar novamente. Além disso, para poder usar a tela, devo iniciar o processo original com ele, para que ele não resolva o meu problema.
Tommy
você pode instalá-lo usando o comando, sudo apt-get install rettymas há poucas limitações com o retty. Confira a página de manual mencionada em resposta.
Devv2