Вы можете увидеть трубу в /proc/$PID/fd
. Дескриптор является символической ссылкой на что-то вроде pipe:[188528098]
. С этой информацией вы можете искать другой процесс:
$ 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
Или, если вы хотите быть уверены (для автоматической обработки), что номер является сокетом, а не частью имени файла:
$ lsof -n | awk 'NF==9 && $5=="FIFO" && $9=="pipe" && $8==188528098'
С lsof
4.88 и выше, вы также можете использовать -E
или +E
флаги:
В сочетании с -p <pid>
, -d <descriptor>
вы можете получить информацию о конечной точке для конкретного дескриптора данного 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
Выше говорилось, что fd
0 of sh
- это труба с fd 1 of sleep
на другом конце. Если вы измените -E
на +E
, вы также получите полную информацию для этого fd из 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
(Посмотрите, как lsof
также имеет трубу на своем стандартном)