Назад | Перейти на главную страницу

Как узнать, какие файлы были открыты в процессе?

У меня есть процесс-демон, и я хочу знать, какие файлы он открыл (и, в идеале, каков его CWD). Есть ли какая-нибудь команда оболочки, которая может мне это сказать?

я люблю lsof, но я думаю, что это перебор для такого простого вопроса. В /proc файловая система содержит все, что вы хотите знать. Возможно, лучше всего подойдет пример:

# ps ax|grep tail
 7196 pts/4    S+     0:00 tail -f /var/log/messages
 8773 pts/0    R+     0:00 grep tail
# ls -l /proc/7196/cwd
lrwxrwxrwx 1 insyte insyte 0 2009-07-29 19:05 /proc/7196/cwd -> /home/insyte
# ls -l /proc/7196/fd
total 0
lrwx------ 1 insyte insyte 64 2009-07-29 19:05 0 -> /dev/pts/4
lrwx------ 1 insyte insyte 64 2009-07-29 19:05 1 -> /dev/pts/4
lrwx------ 1 insyte insyte 64 2009-07-29 19:02 2 -> /dev/pts/4
lr-x------ 1 insyte insyte 64 2009-07-29 19:05 3 -> /var/log/messages

Итак, как видите, /proc/$PID Каталог содержит символическую ссылку под названием «cwd», которая связывает CWD процесса. То же самое верно и для открытых файловых дескрипторов, перечисленных в /proc/$PID/fd.

В /proc/$PID Иерархия содержит обширную информацию обо всех запущенных процессах. Стоит порыться!

Если у вас есть команда lsof доступные [что делает большинство вкусов * nix], которые вы бы использовали:

lsof -p NNN

для вывода списка файлов, открытых процессом NNN. Я давно не использовал BSD, но по памяти термоэлемент близка к lsof.

Я не уверен в команде, чтобы найти cwd процесса, но в Linux cwd символически привязан к каталогу / proc процесса, т.е. / proc / NNN / cwd.

если вы знаете PID процесса, вы можете просто выдать

lsof | grep YOURPID

Быстро и легко запомнить.

или

lsof -c yourprogramexecutable

Попробуйте lsof, если он установлен в вашей системе

D

Это также может помочь, используя файловую систему proc, вы можете:

readlink proc_sample/proc/<YOUR_PID>/fd/*

Не забудьте заменить <YOUR_PID> с желаемым идентификатором процесса.