Puoi vedere la pipa dentro /proc/$PID/fd
. Il descrittore è un collegamento simbolico a qualcosa di simile pipe:[188528098]
. Con queste informazioni puoi cercare l'altro 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
Oppure, se si desidera essere certi (per l'elaborazione automatica) che il numero è il socket e non fa parte del nome di un file:
$ lsof -n | awk 'NF==9 && $5=="FIFO" && $9=="pipe" && $8==188528098'
Con lsof
4.88 e versioni successive, puoi anche utilizzare i flag -E
o +E
:
In combinazione con -p <pid>
, -d <descriptor>
è possibile ottenere le informazioni sull'endpoint per un descrittore specifico di un determinato 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
Sopra ci dice che fd
0 of sh
è una pipe con fd 1 of sleep
all'altra estremità. Se cambi -E
a +E
, ottieni anche le informazioni complete per quel fd di 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
(guarda come lsof
ha anche la pipa sul suo stdin)