是否有任何方法让lsof显示整个argv数组而不仅仅是argv [0]

时间:2016-02-22 02:39:38

标签: python unix lsof

我目前有一个python脚本,可以在大型网络中完成一项非常有用的任务。我所做的是使用lsof -iTCP -F和一些其他选项来转储所有侦听TCP套接字。我能够得到argv [0],这不是问题。但是为了获得完整的argv值,我需要运行ps,并将PID映射到一起,然后将ps中的完整argv值合并到lsof创建的记录中。这感觉不必要地复杂,对于10000多个主机,在Python中,合并这些数据非常慢。

有没有办法显示完整的argv值w / lsof?我已经阅读了手册,但我找不到任何东西,所以我不太希望有任何办法可以做到这一点。当然,我可以为lsof编写一个补丁,但是我必须将它部署到10000多个系统,而且此时这不是启动器。

此外,如果有人有任何聪明的方法来处理Python中的处理,以至于它不需要花费10分钟来合并数据,我很乐意知道。目前,我将所有lsof和ps数据加载到一个dict,其中键是(ip,pid),然后我合并它们。然后我使用合并的dict中的数据创建一个新的dict,其中键是(ip,port)。这非常慢,因为前两个进程需要迭代所有的lsof数据。这可能不是一个问题,但我想我会把它丢进去。我现在唯一的想法是计算处理器并生成N个子进程,每个子进程都有一大块数据要解析,然后将它们全部返回给父进程。

1 个答案:

答案 0 :(得分:0)

如果您知道进程的PID(例如12345),则可以通过读取特殊文件[True, True]来确定整个argv数组。它包含由NUL(\ 0)字符分隔的argv数组。