Определите файлы, открытые определенным процессом в Linux - PullRequest
13 голосов
/ 21 апреля 2010

Мне нужен скрипт для идентификации файлов, открытых конкретным процессом на Linux

Для идентификации fd:

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

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

Ответы [ 5 ]

19 голосов
/ 21 апреля 2010

Команда, которую вы, вероятно, хотите использовать: 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
8 голосов
/ 21 апреля 2010

Пока lsof хорош, вы можете просто:

ls -l /proc/pidoftheproces/fd
5 голосов
/ 21 апреля 2010
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
2 голосов
/ 21 апреля 2010

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

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

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

1 голос
/ 21 апреля 2010
lsof | grep processName
...