Идентифицировать файлы, открытые определенным процессом в Linux

Мне нужно script, чтобы идентифицировать файлы, открытые определенным процессом в linux

Чтобы определить fd:

>cd /proc/<PID>/fd; ls |wc –l  

Я ожидаю увидеть список номеров, который представляет собой список номеров дескрипторов файлов, используемых в процессе. Пожалуйста, покажите мне, как просмотреть все файлы, используемые в этом процессе. Спасибо.

Ответы

Ответ 1

Команда, которую вы, вероятно, захотите использовать, - lsof. Это лучше, чем копать в /proc, поскольку команда является более понятным и более стабильным способом получения системной информации.

lsof -p pid

Однако, если вас интересует материал /proc, вы можете заметить, что файлы /proc/<pid>/fd/x являются символической ссылкой на файл, с которым он связан. Вы можете прочитать значение символической ссылки с помощью команды readlink. Например, это показывает, что терминал stdin привязан к:

$ readlink /proc/self/fd/0
/dev/pts/43

или, чтобы получить все файлы для некоторого процесса,

ls /proc/<pid>/fd/* | xargs -L 1 readlink

Ответ 2

В то время как lsof хорошо, вы можете просто сделать:

ls -l /proc/pidoftheproces/fd

Ответ 3

lsof -p <pid number here> | wc -l

если у вас нет lsof, вы можете сделать примерно то же самое, используя только /proc

например,

$ pid=1825
$ ls -1 /proc/$pid/fd/*
$ awk '!/\[/&&$6{_[$6]++}END{for(i in _)print i}' /proc/$pid/maps

Ответ 4

Вам нужно lsof. Чтобы получить PID приложения, которое открыло foo.txt:

lsof | grep foo.txt | awk -F\  '{print $2}'

или то, что Макмед сказал, чтобы сделать наоборот (файлы списка, открытые процессом).

Ответ 5

lsof | grep processName