стежити за відкритими файлами процесів на linux (у режимі реального часу)


10

Файли, відкриті процесом XYZ, можна знайти за допомогою команди

ls -l /proc/PID/fd

Чи все-таки це можна зробити більш інтерактивним способом, як tailавтоматичне оновлення кожні х секунд?

Відповіді:


15

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

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

Дивитися приємно.

Ви можете використовувати стару школу під час циклу:

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

watchзнаходиться в пакеті propps для систем на базі debian і procps rpm для похідних RedHat систем.


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

8

Якщо ви хочете бачити кожен файл під час його відкриття, ви можете його відфільтрувати strace. Наприклад:

strace -p _pid_of_app_ -e trace=open,close

2
Це справді найкраща відповідь. Я рекомендую прапори, -yі -fякщо ви намагаєтеся налагодити щось, що працює в оболонці. Просто введіть PID оболонки і -fбуде слідувати за будь-якими вилами.
Aea

4

Ви могли б поєднати lsofі watch.

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


вона не даватиме список КОЖНО 2 секунди. Для роботи цього параметра відсутній параметр -r 2! -p - PID. Відповідь дуже бідна!
mahatmanich

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.