Você pode ver o canal em /proc/$PID/fd
. O descritor é um link simbólico para algo como pipe:[188528098]
. Com essa informação, você pode procurar pelo 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), que o número é o soquete e não 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 endpoint para um descritor específico de um dado 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 informando que fd
0 de sh
é um canal com fd 1 de sleep
na outra ponta. Se você alterar -E
para +E
, também obterá todas as informações para esse 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
(veja como lsof
também tem o pipe em sua stdin)