【发布时间】:2016-06-03 08:48:29
【问题描述】:
我目前有一个 Python 脚本,可以在大型网络中完成一项非常有用的任务。我所做的是使用 lsof -iTCP -F 和其他一些选项来转储所有正在侦听的 TCP 套接字。我能够得到 argv[0],这不是问题。但是要获得完整的 argv 值,我需要运行 ps,并将 PID 映射在一起,然后将 ps 中的完整 argv 值合并到 lsof 创建的记录中。这感觉不必要地复杂,对于 10000 多个主机,在 Python 中合并这些数据非常慢。
有没有办法显示完整的 argv 值 w/lsof?我已经阅读了手册,但我找不到任何东西,所以我不太希望有任何方法可以做到这一点。当然,我可以为 lsof 编写一个补丁,但是我必须将它部署到 10000 多个系统,而这在这一点上是行不通的。
另外,如果有人有任何巧妙的方法来处理 Python 中的处理,这样合并数据不需要 10 分钟,我很想知道。目前,我将所有 lsof 和 ps 数据加载到键为 (ip,pid) 的字典中,然后合并它们。然后,我使用键是(ip,port)的合并字典中的数据创建一个新字典。这真的很慢,因为前两个过程需要遍历所有 lsof 数据。这可能不是一个问题,但我想我会把它扔在这里。在这一点上,我唯一的想法是计算处理器并生成 N 个子进程,每个子进程都有一块数据要解析,然后将它们全部返回给父进程。
【问题讨论】: