Veja o redirecionamento STDOUT de um processo em execução

15

Se eu iniciar um aplicativo com este comando:

/path/to/my/command >> /var/log/command.log

E o comando não retorna, existe uma maneira, a partir de outro prompt, para ver para que o redirecionamento STDOUT está configurado?

Estou procurando algo como

cat /proc/PID/redirects

ou

ps -??? | grep PID

mas qualquer método serve.

    
por Rich 27.06.2011 / 15:11

3 respostas

21

Confira o fildescriptor # 1 (stdout) em / proc / $ PID / fd /. O kernel representa este arquivo como um link simbólico para um arquivo para o qual o descritor é redirecionado.

$ readlink -f /proc/20361/fd/1
/tmp/file
    
por 27.06.2011 / 15:21
4

Uma ferramenta útil para ver quais arquivos são abertos por quais processos é lsof . Você pode apontar para um processo específico com lsof -p1234 e verá basicamente as mesmas informações que pode obter com ls -l /proc/1234/fd no Linux, ou seja, quais arquivos são abertos.

A coisa mais útil com lsof é o contrário: lsof /path/to/file informa quais processos estão usando esse arquivo.

    
por 27.06.2011 / 23:59
0

Muitas respostas mencionam que é assim:

tail -f /proc/{PID}/fd/1

No entanto, descobri que nem sempre funciona. Como alternativa, o cat às vezes produz resultados.

cat /proc/{PID}/fd/1

em que {PID} pode ser pesquisado usando o comando ps aux .

Também é bom mencionar que o número no final do comando (neste caso, fd / 1) pode ser alterado para outras saídas.

 /proc/{PID}/fd/0 # STDIN
 /proc/{PID}/fd/1 # STDOUT
 /proc/{PID}/fd/2 # STDERR
    
por 13.04.2018 / 03:17