У меня есть процесс-демон, и я хочу знать, какие файлы он открыл (и, в идеале, каков его 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>
с желаемым идентификатором процесса.