10 可以使用以下命令找到由XYZ进程打开的文件 ls -l /proc/PID/fd 无论如何,是否可以通过更具交互性的方式来完成,例如tail每x秒自动刷新一次? monitoring performance-monitoring process files — 弗兰基 source
15 尝试watch命令: watch -n 10 ls -l /proc/$$/fd 手表很好看 您可以在循环中使用一所古老的学校: while : do ls -l /proc/$$/fd sleep 10 done watch在基于debian的系统上的procps软件包中,在RedHat派生的系统上的procps rpm中。 — 达维 source 1 sleep本身可以用作while循环中的条件,因此您的示例可以像这样优雅地编写:while sleep 10; 做ls -l / proc / $$ / fd; 完成 — ipozgaj,2011年
7 如果要查看每个文件的打开状态,可以使用进行过滤strace。例如: strace -p _pid_of_app_ -e trace=open,close — 叶夫根尼 source 2 这确实是最好的答案。我建议使用这些标志-y,-f如果您要调试在Shell中运行的某些程序,则建议使用这些标志。只需传入shell PID,-f它将跟随所有派生。 — Aea
4 你可以结合lsof和watch。 例如,watch "lsof -p 1234"将为您提供每2秒pid 1234所有打开的文件的列表。您可以更改一些参数以满足您的需求。 — 基督教 source 它不会每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 — 阿坎沙夏玛 source