Знайдіть, який процес знаходиться на іншому кінці труби


34

Я намагаюся простежити якусь дивну поведінку кількох процесів і зіткнувся з моментом, я не знаю, як простежити минуле. Виснований процес, який я приєднав до використання, strace -pпоказав це:

Process 7926 attached - interrupt to quit
read(3, 

Гаразд, тому він чекає введення на fd 3, тому я пішов перевірити, що це:

$ ls -l /proc/7926/fd/3
lr-x------ 1 user grp 64 Mar 15 10:41 /proc/7926/fd/3 -> pipe:[20043922]

Гаразд, значить, це труба ... тепер питання - хто автор цієї труби? Я пам'ятаю, що в Linux є спеціальна функція для сокетів домену Unix, де ви можете запитувати шлях до файлу, який починається з байта NUL, щоб отримати доступ до "абстрактного простору імен сокета" (згадується тут: http://tkhanson.net/cgit.cgi /misc.git/plain/unixdomain/Unix_domain_sockets.html ). Я не впевнений, чи є щось подібне для труб, якими я міг би скористатися, але нічого не знайшов.

Я сподівався на інструмент, який подобається fuserабо lsofможе допомогти, але я ніде не дістався.

Якісь ідеї?

Відповіді:


32

Вміст симпосилання "труба: [20043922]" є унікальним ідентифікатором; інший кінець труби матиме відповідний ідентифікатор.

(find /proc -type l | xargs ls -l | fgrep 'pipe:[20043922]') 2>/dev/null

повинні показати вам обидва кінці труби.


1
Гарне мислення, дякую! Під час дослідження я також натрапив на цю тему тут defaultfault.com/questions/48330/…, тож я подумав, що я перейду за посиланням також просто ffr для інших.
FatalError

2

Ви можете отримати список процесів за допомогою труби за допомогою lsofкоманди:

lsof | grep 'FIFO.*20043922'

На виході будуть показані читачі (у стовпці FD із записами на зразок 1r) та авторами (ті самі стовпці із записами, як 2w).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.