Respuestas:
Una canalización sin nombre es privada por naturaleza para las aplicaciones que tienen el descriptor de archivo. No hay una forma de principios para observar o modificar el tráfico en la tubería. Tampoco creo que haya una manera de mirar la tubería directamente en Linux.
Sin embargo, hay una forma sin principios de hacer más o menos lo que buscas: a través de la llamada al sistema ptrace . No estarías clavando en la tubería per se, sino en uno de los procesos. Para la observación, use strace , p. Ej.
strace -p1234 -s99999 -e write
donde 1234
está el ID de proceso de un proceso que escribe en la tubería. Modificar los datos es más difícil, pero se puede hacer. Creo que la forma más fácil sería configurar primero un proceso intermedio que copie su entrada estándar a su salida estándar, más los datos que desea inyectar (y menos cualquier información que desee suprimir). Cree dos tuberías con nombre y comience ese proceso intermedio con stdin en una tubería y stdout en la otra. Luego, use un depurador (por ejemplo, GDB ) para hacer que ambos procesos de destino se ejecuten open
en la tubería con el nombre apropiado, luego dup
coloque la tubería en el descriptor de archivo apropiado. Tenga en cuenta que existe la posibilidad de que bloquee uno de los procesos en el proceso.
(Si no comprende el último párrafo, lo siento, pero requiere un cierto nivel de tecnicidad. No creo que haya una manera más fácil).
Algunas herramientas útiles para monitorear una tubería:
Para un programa que ya se está ejecutando y no se controlan las tuberías, consulte el método gdb:
Redirigir la salida de un proceso en ejecución .
O uno puede usar strace :
strace -ewrite -p $PID 2>&1 | grep "write(1"
muestra solo descriptor 1 llamadas. "2> & 1" es redirigir stderr a stdout, ya que strace escribe en stderr por defecto.