Vedi il reindirizzamento STDOUT di un processo in esecuzione


17

Se avvio un'app con questo comando:

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

E il comando non ritorna, c'è un modo, da un altro prompt, per vedere su cosa è impostato il reindirizzamento STDOUT?

Sto cercando qualcosa del genere

cat /proc/PID/redirects

o

ps -??? | grep PID

ma qualsiasi metodo lo farà.

Risposte:


22

Controlla il descrittore di file n. 1 (STDOUT) in /proc/$PID/fd/. Il kernel rappresenta questo file come collegamento simbolico a un file a cui viene reindirizzato il descrittore.

$ readlink -f /proc/20361/fd/1
/tmp/file

Perfetto! Grazie! Potete fornire un link o dettagli sugli altri reindirizzamenti come STDERR, ovvero quali numeri sono?
Ricco

Almeno su Linux (e credo su ogni altro SO simile a UNIX) sono 0: stdin, 1: stdout, 2: stderr (errore standard). Nota che ci sono anche macro C definite in <stdio.h>: STD {IN, OUT, ERR} _FILENO. Vedi 'man stdout' per i dettagli.
Petr Uzel,

0, 1, 2 rispettivamente per stdin, stdout e stderr sono garantiti in tutti i sistemi simili a Unix / Unix e sono validi anche su Windows.
Paul Stelian,

su MacOS un modo per farlo? il / proc / <pid> / fd / 1 non esiste, forse posso usare mkfifo?
Alexander Mills,

4

Uno strumento utile per vedere quali file sono aperti da quali processi è lsof. Puoi indicarlo a un processo specifico con lsof -p1234e vedrai per lo più le stesse informazioni che puoi ottenere con ls -l /proc/1234/fdLinux, ovvero quali file vengono aperti.

La cosa più utile lsofè andare al contrario: lsof /path/to/fileti dice quali processi stanno usando quel file.


1

Molte risposte menzionano farlo in questo modo:

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

Tuttavia, ho scoperto che non sempre funziona. In alternativa, a catvolte produce risultati.

cat /proc/{PID}/fd/1

dove {PID} può essere cercato usando il ps auxcomando.

Va anche detto che il numero alla fine del comando (in questo caso fd / 1) può essere modificato per altre uscite.

 /proc/{PID}/fd/0 # STDIN
 /proc/{PID}/fd/1 # STDOUT
 /proc/{PID}/fd/2 # STDERR
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.