本文介绍了lsof的应该给所有打开的文件为一组的PID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个服务器上运行的过程的30实例和要记录打开文件用于分析每一个过程。

I have 30 instances of a process running on a server and want to log open files for each process for analysis.

我运行以下命令:

* ps auwwx | grep PROG_NAME | awk '{print $2}' | xargs lsof -p | less

据投诉,的lsof的:对状态错误:没有这样的文件或目录

但是,如果我跑 lsof的-p< PID> 它让我打开文件该进程的列表。我怎样才能得到所有打开的文件列表的过程在FreeBSD机器上的所有30实例。

However, if I run lsof -p < pid > it gives me the list of open files for that process . How can I get a list of all open files for all 30 instances of the process on a FreeBSD machine.

此外,我不希望被列出的共享库。如果我做 -d^ TXT它没有显示我想要显示一些其他的数据库文件。是否有任何其他方式到grep出来的.so文件?

Moreover, I do not want the shared libraries to be listed. If I do -d "^txt" it isn't showing some other db files which I want to be shown. Is there any other way to grep out the .so files?

推荐答案

lsof的-p 选项采用一个逗号分隔的PID的列表。您正在使用的方式的xargs 将通过的PID作为独立参数,导致一些人是因为PTED名间$ P $。

The lsof -p option takes a comma-separated list of PIDs. The way you're using xargs will pass the pids as separate arguments leading some to be interpreted as filenames.

尝试 lsof的-p $(grep的你| TR'\\ 012')这将有一个结尾逗号,我不知道,如果 lsof的会在意,但你可以 SED ,如果必要的。

Try lsof -p $(your grep | tr '\012' ,) That's going to have a trailing comma, I'm not sure if lsof will care but you could sed it off if necessary.

这篇关于lsof的应该给所有打开的文件为一组的PID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-20 19:30