Идентифицировать файлы, открытые определенным процессом в 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