Sie können das Rohr in sehen /proc/$PID/fd
. Der Deskriptor ist ein Symlink zu so etwas pipe:[188528098]
. Mit diesen Informationen können Sie nach dem anderen Prozess suchen:
$ 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
Oder wenn Sie sicher sein möchten (für die automatische Verarbeitung), dass die Nummer der Socket und nicht Teil eines Dateinamens ist:
$ lsof -n | awk 'NF==9 && $5=="FIFO" && $9=="pipe" && $8==188528098'
Mit lsof
4,88 und oben können Sie auch die Verwendung -E
oder +E
Fahnen:
In Kombination mit -p <pid>
, -d <descriptor>
können Sie die Endpunktinformationen für einen bestimmten erhalten, Descriptor eines gegebenen 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
Oben sagen Sie uns, dass fd
0 von sh
eine Pipe mit fd 1 von sleep
am anderen Ende ist. Wenn Sie ändern -E
zu +E
, erhalten Sie auch die vollständigen Informationen für das fd von 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
(siehe wie lsof
hat auch das Rohr auf seinem stdin)