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
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.
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.
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