Вопрос: Как получить дополнительную информацию об открытии открытых труб в / proc в Linux?


В 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]

Как получить дополнительную информацию о открытых трубах, например, какой процесс находится на другом конце?


47
2017-07-30 22:18


Источник


lsof, найти в целом /proc медленный. Может ли кто-нибудь предоставить более эффективное решение? - pihentagy


Ответы:


Совсем другие ответы, но:

lsof | grep 90222668

Покажет вам оба конца, потому что оба конца разделяют «номер трубы».


39
2017-07-31 15:55



Ах, конечно. Работает так, как ожидалось. Вы даже можете указать номер дескриптора файла, а какой конец - читатель, а кто автор, посмотрев на четвертый столбец вывода! - Kamil Kisiel
Я думаю, что это число может быть номером inode для pipefs, который вы не можете монтировать. Я ищу способ получить inode для сопоставлений имен файлов, но это может быть лучшим способом. Кстати, мне очень нравится этот вопрос :-) - Kyle Brandt♦
Почему-то это не работает для меня. Все выходы - это сама труба. - Rui Marques
Выполнение lsof в качестве стандартного пользователя может не предоставлять вам информацию из всех процессов. Обычно у вас нет разрешения просматривать все файлы процессов / proc / <pid> / fd в качестве пользователя без полномочий root. - Andre Holzner
Кроме того, вы можете использовать lsof -n -P | grep 90222668 чтобы избежать ненужных поисков имен, что должно ускорить его. - Wodin


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


3
2017-07-31 00:45



Спасибо за совет. Один из способов автоматизировать это: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID  Первая команда ls будет печатать дескрипторы файлов обоих концов канала, а вторая даст вам идентификатор процесса - Joao Costa


Большая часть информации, которую я знаю, как попасть на открытые трубы, - это

lsof|grep FIFO

Боюсь, все еще говорит только об одном конце.


1
2017-07-30 22:31



Это примерно то же самое, что я могу богу из / proc, я предполагаю, что lsof получает его из того же места. - Kamil Kisiel