¿Cómo puedo obtener más información sobre show de tuberías abiertas en / proc en Linux?

53

En Linux, si vas a cavar a /proc/<pid>/fdmenudo, verás resultados como:

lrwx------ 1 root root 64 Jul 30 15:14 0 -> /dev/null
lrwx------ 1 root root 64 Jul 30 15:14 1 -> /dev/null
l-wx------ 1 root root 64 Jul 30 15:14 10 -> pipe:[90222668]
lr-x------ 1 root root 64 Jul 30 15:14 11 -> pipe:[90222669]
l-wx------ 1 root root 64 Jul 30 15:14 13 -> pipe:[90225058]
lr-x------ 1 root root 64 Jul 30 15:14 14 -> pipe:[90225059]

¿Cómo obtengo más información sobre las tuberías abiertas, como qué proceso está en el otro extremo?

Kamil Kisiel
fuente
Isof, de encontrar en conjunto /proces lento. ¿Alguien puede proporcionar una solución más efectiva?
pihentagy

Respuestas:

46

Similar a otras respuestas, pero:

lsof | grep 90222668

Le mostrará ambos extremos, porque ambos extremos comparten el 'número de tubería'.

Kyle Brandt
fuente
3
Ah, por supuesto. Funciona como se esperaba. ¡Incluso puede decir el número del descriptor de archivo y qué final es el lector y cuál es el escritor mirando la cuarta columna de salida!
Kamil Kisiel
Creo que ese número podría ser el número de inodo de la tubería para pipefs que no puede montar. Estoy buscando una manera de obtener inode para las asignaciones de nombres de archivo, pero esta podría ser la mejor manera. Por cierto, me encanta esta pregunta :-)
Kyle Brandt el
De alguna manera esto no está funcionando para mí. Todo lo que sale es la tubería en sí.
Rui Marques
ejecutar lsof como usuario estándar puede no proporcionarle información de todos los procesos. Por lo general, no tiene permiso para ver el directorio / proc / <pid> / fd de todos los procesos como un usuario no root.
Andre Holzner
55
Además, es posible que desee utilizar lsof -n -P | grep 90222668para evitar búsquedas innecesarias de nombres, lo que debería acelerarlo.
Wodin
4

La única forma de encontrar qué proceso está en el otro extremo es recorrer todos los procesos en / proc y ver cuáles están usando esa tubería (es decir, cuáles tienen enlaces simbólicos en / proc / pid / fd a la misma ID de tubería)

bdonlan
fuente
Gracias por el consejo. Una forma de automatizar esto es: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID el primer comando ls imprimirá los descriptores de archivo de ambos extremos de la tubería, mientras que el segundo le dará la identificación del proceso
Joao Costa
2

La mayor cantidad de información que sé cómo obtener en tuberías abiertas es

lsof|grep FIFO

Todavía solo cuenta sobre un extremo, me temo.

caos
fuente
Eso es casi lo mismo que puedo deducir de / proc, supongo que lsof lo obtiene de la misma ubicación.
Kamil Kisiel