Penso di avere una soluzione più semplice qui. Basta cercare una directory il cui nome corrisponda al PID che stai cercando, sotto lo pseudo-filesystem accessibile sotto /proc
sentiero. Quindi, se hai un programma in esecuzione, il cui ID è 1199, cd
in esso:
$ cd /proc/1199
Quindi cerca il fd
directory sottostante
$ cd fd
Questo fd
contiene gli oggetti descrittori di file che il tuo programma sta usando (0:stdin, 1:stdout, 2:stderr) e solo tail -f
quello di cui hai bisogno - in questo caso, stdout):
$ tail -f 1
Stavo cercando esattamente la stessa cosa e ho scoperto che puoi fare:
strace -ewrite -p $PID
Non è esattamente ciò di cui avevi bisogno, ma è abbastanza vicino.
Ho provato l'output di reindirizzamento, ma non ha funzionato per me. Forse perché il processo stava scrivendo su un socket, non lo so.
Per me, questo ha funzionato:
-
Accedi come proprietario del processo (anche
root
viene negato il permesso)~$ su - process_owner
-
Coda il descrittore di file come menzionato in molte altre risposte.
~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
Ci sono alcune opzioni qui. Uno consiste nel reindirizzare l'output del comando a un file, quindi utilizzare 'tail' per visualizzare le nuove righe che vengono aggiunte a quel file in tempo reale.
Un'altra opzione è avviare il programma all'interno di 'schermo', che è una sorta di applicazione terminale basata su testo. Le sessioni dello schermo possono essere collegate e scollegate, ma nominalmente sono pensate solo per essere utilizzate dallo stesso utente, quindi se vuoi condividerle tra utenti, è un gran rompipalle.