Найдите, что процесс на другом конце трубы

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

Содержимое символической ссылки "pipe: [20043922]" является уникальным идентификатором; другой конец канала будет иметь соответствующий идентификатор.

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

должен показать вам оба конца трубы.

Кайл Джонс
источник
1
Хорошее мышление, спасибо! Во время расследования я также наткнулся на эту ветку здесь serverfault.com/questions/48330/… так что я решил, что здесь тоже я бы уронил ссылку, просто для других тоже.
FatalError
2

Вы можете получить список процессов, используя канал, используя lsofкоманду:

lsof | grep 'FIFO.*20043922'

Выходные данные будут отображать читателей (в столбце FD с записями, такими как 1r) и пишущих (те же столбцы с записями, как 2w).

Eugen
источник