Encuentra qué proceso hay en el otro extremo de una tubería

34

Estoy tratando de rastrear un comportamiento extraño de algunos procesos y me encontré con un punto que no estoy seguro de cómo rastrear el pasado. El proceso bloqueado, que adjunté al uso strace -pmostró esto:

Process 7926 attached - interrupt to quit
read(3, 

De acuerdo, está esperando la entrada en fd 3, así que fui a verificar qué es:

$ ls -l /proc/7926/fd/3
lr-x------ 1 user grp 64 Mar 15 10:41 /proc/7926/fd/3 -> pipe:[20043922]

Bien, entonces es una pipa ... ahora la pregunta: ¿quién es el escritor de esta pipa? Recuerdo que en Linux hay una característica especial para los sockets de dominio Unix donde puede solicitar una ruta de archivo que comience con un byte NUL para acceder al "espacio de nombres de socket abstracto" (mencionado aquí: http://tkhanson.net/cgit.cgi /misc.git/plain/unixdomain/Unix_domain_sockets.html ). No estoy seguro de si hay algo similar para las tuberías que pueda aprovechar, pero no he encontrado nada.

Esperaba una herramienta como fusero lsofpodría ayudar, pero no he llegado a ninguna parte.

¿Algunas ideas?

Error fatal
fuente

Respuestas:

32

El contenido del enlace simbólico "pipe: [20043922]" es un ID único; El otro extremo de la tubería tendrá una ID coincidente.

(find /proc -type l | xargs ls -l | fgrep 'pipe:[20043922]') 2>/dev/null

debería mostrarte ambos extremos de la tubería.

Kyle Jones
fuente
1
Bien pensado, gracias! Mientras investigaba, también encontré este hilo aquí serverfault.com/questions/48330/…, así que pensé en soltar el enlace aquí también solo para otros.
FatalError
2

Puede obtener la lista de procesos utilizando la tubería mediante el lsofcomando:

lsof | grep 'FIFO.*20043922'

La salida mostrará los lectores (en la columna FD con entradas como 1r) y escritores (mismas columnas con entradas como 2w).

Eugen
fuente