Respostas:
Um canal sem nome é, por natureza, privado para os aplicativos que possuem o descritor de arquivo. Não existe uma maneira baseada em princípios de observar ou modificar o tráfego no tubo. Também não acho que haja uma maneira de ver o canal diretamente no Linux.
Existe uma maneira sem princípios de fazer mais ou menos o que você procura : através da chamada do sistema ptrace . Você não estaria aderindo ao tubo por si só, mas a um dos processos. Para observação, use strace , por exemplo
strace -p1234 -s99999 -e write
onde 1234
é o ID do processo que grava no canal. Modificar os dados é mais difícil, mas pode ser feito. Eu acho que a maneira mais fácil seria primeiro configurar um processo intermediário que copie sua entrada padrão para sua saída padrão, mais os dados que você deseja injetar (e menos os dados que deseja suprimir). Crie dois pipes nomeados e inicie esse processo intermediário com stdin em um pipe e stdout no outro. Em seguida, use um depurador (por exemplo, GDB ) para executar os dois processos de destino open
no pipe nomeado apropriado e, em seguida, dup
coloque o pipe no descritor de arquivo apropriado. Observe que há uma chance de você travar um dos processos no processo.
(Se você não entende o último parágrafo, desculpe, mas exige um certo nível de tecnicidade. Não acho que exista uma maneira mais fácil.)
Algumas ferramentas úteis para monitorar um pipe:
Para um programa já em execução em que não se controla a tubulação, consulte o método gdb:
Redirecionando a saída de um processo em execução .
Ou pode-se usar strace :
strace -ewrite -p $PID 2>&1 | grep "write(1"
mostra apenas as chamadas do descritor 1. "2> & 1" é redirecionar stderr para stdout, como strace grava no stderr por padrão.