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 lsof
4.88 e acima, você também pode usar os sinalizadores -E
ou +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 fd
0 de sh
é um tubo com fd 1 de sleep
na outra extremidade. Se você mudar -E
para +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 lsof
também tem o tubo no seu stdin)