Puedes ver la tubería adentro /proc/$PID/fd
. El descriptor es un enlace simbólico a algo así pipe:[188528098]
. Con esa información puede buscar el otro proceso:
$ lsof -n | grep -w 188528098
sleep 1565 hl 1w FIFO 0,12 0t0 188528098 pipe
sleep 1566 hl 0r FIFO 0,12 0t0 188528098 pipe
O, si desea estar seguro (para el procesamiento automático) de que el número es el socket y no parte del nombre de un archivo:
$ lsof -n | awk 'NF==9 && $5=="FIFO" && $9=="pipe" && $8==188528098'
Con lsof
4.88 y superior, también puede usar las banderas -E
o +E
:
En combinación con -p <pid>
, -d <descriptor>
puede obtener la información del punto final para un descriptor específico de un pid dado .
$ sleep 1 | sh -c 'lsof -E -ap "$$" -d 0; exit'
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sh 27176 chazelas 0r FIFO 0,10 0t0 2609460 pipe 27175,sleep,1w
Por encima de decirnos que fd
0 de sh
es una tubería con fd 1 de sleep
en el otro extremo. Si cambia -E
a +E
, también obtiene la información completa para ese fd de sleep
:
$ sleep 1 | sh -c 'lsof +E -ap "$$" -d 0; exit'
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sleep 27066 chazelas 1w FIFO 0,10 0t0 2586272 pipe 27067,sh,0r 27068,lsof,0r
sh 27067 chazelas 0r FIFO 0,10 0t0 2586272 pipe 27066,sleep,1w
(vea cómo lsof
también tiene la tubería en su stdin)