4

Я знаю файловый дескриптор файла, открытого процессом, но я не знаю идентификатор процесса. Как можно распечатать имена файлов из командной строки Linux, если я знаю дескриптор файла, открытого процессом?

2 ответа2

3

Если вы не знаете идентификатор процесса, вам придется проверить все процессы с одинаковым открытым fd #, поскольку файловые дескрипторы не являются глобально уникальными. Чем меньше fd #, тем больше процессов будет его открывать (например, в моей системе, даже если fd # составляет около 30, мне все равно нужно угадать между 15 процессами, и если бы я искал fd # около 10, тогда в списке будет ~ 170 процессов).

Файловая система proc показывает файловые дескрипторы в виде символических ссылок в /proc/<pid>/fd .

# ls -l /proc/1/fd
lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/0 -> /dev/null
lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/1 -> /dev/null
lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/2 -> /dev/null
l-wx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/3 -> /dev/kmsg
lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/4 -> anon_inode:[eventpoll]
lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/5 -> anon_inode:[signalfd]
lr-x------ 1 root root 64 Feb 12 22:10 /proc/1/fd/6 -> /sys/fs/cgroup/systemd/
...etc...

Например, чтобы найти fd # 5 во всех процессах:

# ls -l /proc/*/fd/5
lrwx------ 1 root    root    64 Feb 12 22:10 /proc/1/fd/5 -> anon_inode:[signalfd]
lrwx------ 1 root    root    64 Feb 12 22:15 /proc/129/fd/5 -> socket:[6980]
lrwx------ 1 root    root    64 Feb 12 22:15 /proc/168/fd/5 -> socket:[7847]
lrwx------ 1 root    root    64 Feb 12 22:15 /proc/341/fd/5 -> anon_inode:[eventfd]
lr-x------ 1 root    root    64 Feb 12 22:15 /proc/342/fd/5 -> anon_inode:inotify
...etc...

Точный интерфейс для разрешения целей символической ссылки - readlink():

# readlink /proc/427529/fd/7
/home/grawity/lib/dotfiles/vim/backup/%home%grawity%.bashrc.swp
1

Из man-страницы lsof:

Чтобы найти процесс, в котором открыт файл /u /abe /foo, используйте:

lsof /u/abe/foo

Смотрите также этот урок на lsof и эти советы на lsof

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .