Risposte:
Una pipe senza nome è per sua natura privata delle applicazioni che hanno il descrittore di file. Non esiste un modo di principio per osservare o modificare il traffico sulla pipa. Non penso che ci sia un modo per guardare la pipe direttamente su Linux.
C'è un modo senza principi di fare più o meno quello che stai cercando, però: attraverso la chiamata di sistema ptrace . Non ti attaccheresti sul tubo di per sé, ma su uno dei processi. Per l'osservazione, utilizzare strace , ad es
strace -p1234 -s99999 -e write
dove si 1234
trova l'ID del processo di un processo che scrive sulla pipe. La modifica dei dati è più difficile, ma può essere eseguita. Penso che il modo più semplice sarebbe innanzitutto impostare un processo intermedio che copi il suo input standard sul suo output standard, più i dati che vuoi iniettare (e meno tutti i dati che vuoi sopprimere). Crea due pipe nominate e avvia quel processo intermedio con stdin su una pipe e stdout sull'altra. Quindi utilizzare un debugger (ad esempio GDB ) per eseguire entrambi i processi di destinazione open
sulla pipe denominata appropriata, quindi dup
posizionare la pipe sul descrittore di file appropriato. Si noti che esiste la possibilità che si arresti in modo anomalo uno dei processi nel processo.
(Se non capisci l'ultimo paragrafo, mi dispiace, ma richiede un certo livello di tecnicità. Non credo che ci sia un modo più semplice.)
Alcuni strumenti utili per il monitoraggio di una pipe:
Per un programma già in esecuzione in cui non si controlla il piping, consultare il metodo gdb:
reindirizzamento dell'output da un processo in esecuzione .
Oppure si può usare strace :
strace -ewrite -p $PID 2>&1 | grep "write(1"
mostra solo le chiamate al descrittore 1. "2> & 1" è il reindirizzamento di stderr su stdout, come impostazione predefinita strace scrive su stderr.