问题描述
我有一个服务器上运行的过程的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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!