Як я можу отримати більше інформації про відкриті труби show in / proc в Linux?


53

У Linux, якщо ви /proc/<pid>/fdчасто копаєтеся, ви побачите вихід:

lrwx------ 1 root root 64 Jul 30 15:14 0 -> /dev/null
lrwx------ 1 root root 64 Jul 30 15:14 1 -> /dev/null
l-wx------ 1 root root 64 Jul 30 15:14 10 -> pipe:[90222668]
lr-x------ 1 root root 64 Jul 30 15:14 11 -> pipe:[90222669]
l-wx------ 1 root root 64 Jul 30 15:14 13 -> pipe:[90225058]
lr-x------ 1 root root 64 Jul 30 15:14 14 -> pipe:[90225059]

Як отримати більш детальну інформацію про відкриті труби, наприклад, який процес знаходиться на іншому кінці?


Якщо пошук у цілому /procвідбувається повільно. Чи може хтось запропонувати більш ефективне рішення?
pihentagy

Відповіді:


46

Подібні до інших відповідей, але:

lsof | grep 90222668

Показує вам обидва кінці, оскільки обидва кінці мають "номер труби".


3
Ах, звичайно. Працює як очікувалося. Ви навіть можете вказати номер дескриптора файлу, який кінець є зчитувачем, а який - письменником, переглянувши 4-й стовпчик виводу!
Kamil Kisiel

Я думаю, що це число може бути вхідним номером труби для pipefs, яку ви не можете встановити. Я шукаю спосіб отримати inode для відображення імен файлів, але це, можливо, найкращий спосіб. До речі, мені подобається це питання :-)
Кайл Брандт

Якось це для мене не працює. Все, що вона виводить, - це сама труба.
Руй Маркес

запуск lsof як стандартного користувача може не давати вам інформацію про всі процеси. Зазвичай у вас немає дозволу переглядати всі файли каталогів / proc / <pid> / fd як некористувацького користувача.
Андре Хольцнер

5
Крім того, ви можете скористатися, lsof -n -P | grep 90222668щоб уникнути непотрібних пошуку імен, які повинні прискорити його.
Водін

4

Єдиний спосіб знайти, який процес знаходиться на іншому кінці - це перекидання всіх процесів в / proc і бачення, які використовують цю трубу (тобто, які мають посилання в / proc / pid / fd до того ж ідентифікатора труби)


Дякую за пораду. Один із способів автоматизації цього: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID Перша команда ls надрукує дескриптори файлів обох кінців труби, а друга дасть вам ідентифікатор процесу
Joao Costa

2

Найбільше інформації, яку я знаю, як потрапити на відкриті труби, - це

lsof|grep FIFO

Я боюсь лише про один її кінець.


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