Você pode ver o tubo /proc/$PID/fd. O descritor é um link simbólico para algo assim pipe:[188528098]. Com essas informações, você pode procurar o outro processo:
$ 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
Ou, se você quiser ter certeza (para processamento automático) de que o número é o soquete e não faz parte de um nome de arquivo:
$ lsof -n | awk 'NF==9 && $5=="FIFO" && $9=="pipe" && $8==188528098'
Com lsof4.88 e acima, você também pode usar os sinalizadores -Eou +E:
Em combinação com -p <pid>, -d <descriptor>você pode obter as informações do terminal para um descritor específico de um determinado pid .
$ 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
Acima nos diz que fd0 de shé um tubo com fd 1 de sleepna outra extremidade. Se você mudar -Epara +E, também receberá as informações completas para esse código 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
(veja como lsoftambém tem o tubo no seu stdin)