контролировать открытые файлы процессов в Linux (в режиме реального времени)

10

Файлы, открытые процессом XYZ, можно найти с помощью команды

ls -l /proc/PID/fd

Есть ли в любом случае, что можно сделать более интерактивным способом, как tailавтоматическое обновление каждые х секунд?

Фрэнки
источник

Ответы:

15

Попробуйте watchкоманду:

watch -n 10 ls -l /proc/$$/fd

Смотреть приятно.

Вы можете использовать старую школу while:

while :
do
 ls -l /proc/$$/fd
 sleep 10
done

watchнаходится в пакете procps в системах на основе Debian и в RPPS для систем, производных от RedHat.

Davey
источник
1
Сам сон можно использовать в качестве условия в цикле while, поэтому ваш пример можно написать более элегантно, например: while sleep 10; do ls -l / proc / $$ / fd; сделано
ipozgaj
7

Если вы хотите видеть каждый файл при его открытии, вы можете отфильтровать его с помощью strace. Например:

strace -p _pid_of_app_ -e trace=open,close
Евгений
источник
2
Это действительно лучший ответ. Я бы порекомендовал флаги, -yи -fесли вы пытаетесь отладить что-то, работающее в оболочке. Просто -fвведите PID оболочки и последует за любыми вилками.
Aea
4

Вы могли бы объединить lsofи watch.

Например watch "lsof -p 1234", даст вам список всех открытых файлов pid 1234 каждые 2 секунды. Вы можете изменить некоторые параметры в соответствии с вашими потребностями.

Кристиан
источник
это не даст список КАЖДЫЕ 2 секунды. Параметр -r 2 отсутствует, чтобы это работало! -p это PID. Ответ очень плохой!
Махатманич
2
Хорошо, не знал о -rвозможности для lsof. Поэтому я watchвыполнял lsofкаждые две секунды.
Кристиан
0

Я создал файл bash, в котором я записывал вывод команды в файл. Файл создан на основе текущей даты. Здесь я подсчитываю количество открытых файлов.

#!/bin/bash
while :
do
 cd /proc/<PID>/fd
 today=$(date +"%m-%d-%Y")
 filename="/tmp/${today}.txt"
 ls -l | wc -l >> "${filename}"
 sleep 10
done
Аканша Шарма
источник