监控Linux上的打开进程文件(实时)


10

可以使用以下命令找到由XYZ进程打开的文件

ls -l /proc/PID/fd

无论如何,是否可以通过更具交互性的方式来完成,例如tail每x秒自动刷新一次?

Answers:


15

尝试watch命令:

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

手表很好看

您可以在循环中使用一所古老的学校:

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

watch在基于debian的系统上的procps软件包中,在RedHat派生的系统上的procps rpm中。


1
sleep本身可以用作while循环中的条件,因此您的示例可以像这样优雅地编写:while sleep 10; 做ls -l / proc / $$ / fd; 完成
ipozgaj,2011年

7

如果要查看每个文件的打开状态,可以使用进行过滤strace。例如:

strace -p _pid_of_app_ -e trace=open,close

2
确实是最好的答案。我建议使用这些标志-y-f如果您要调试在Shell中运行的某些程序,则建议使用这些标志。只需传入shell PID,-f它将跟随所有派生。
Aea

4

你可以结合lsofwatch

例如,watch "lsof -p 1234"将为您提供每2秒pid 1234所有打开的文件的列表。您可以更改一些参数以满足您的需求。


它不会每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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.