python - lsof 有什么方法可以显示整个 argv 数组而不仅仅是 argv[0]

标签 python unix lsof

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

有什么方法可以通过 lsof 显示完整的 argv 值吗?我已经阅读了手册但找不到任何东西,所以我不太希望有任何方法可以做到这一点。当然,我可以为 lsof 编写一个补丁,但是我必须将它部署到 10000 多个系统,这在这一点上是不可能的。

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

最佳答案

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

关于python - lsof 有什么方法可以显示整个 argv 数组而不仅仅是 argv[0],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35544961/

相关文章:

python - matplotlib 交互式...不是

python - 如何使用 Python 转换列表中的多个列表?

linux - 为什么获取pthread_mutex_lock后sleep()会阻塞整个程序?

bash - 检查命名管道/FIFO 是否打开写入

python - 将Django Python应用程序放入Docker容器后获得404错误消息

python - QListWidget 所选项目按行排序

linux - 带通配符的 rm 显示任务集帮助输出

linux - 当跨不同文件系统传输时,mv 与 cp 在速度和安全性方面相比如何?

sockets - http: 接受错误:接受 tcp [::]:9000: accept4: 打开的文件太多; 1s 重试

unix - lsof 的非零退出代码