我很清楚以前有人问过这个问题的变体,但我仍然没有找到一个特别好的答案。
我想做的是编写一个Python脚本,该脚本将测量进程及其所有子进程当前的带宽使用情况和上传/下载的总字节数,并在其中任何一个值超过用户定义的阈值时将其杀死。其目的是限制备份客户端的网络使用。
我考虑了几个测量进程带宽的选项:
-
bwmon
完全符合我的要求,但令人沮丧的是,它以目前的形式不适合我。问题是,它依赖于从/proc/net/ip_conntrack
读取bytes=
和packets=
字段来测量带宽。出于某种原因,这些字段对我来说根本不存在——我怀疑可能是为了做不同的内核版本。 -
目前,我找到的最可行的解决方案是根据这个建议解析
strace -e trace=recvfrom,sendto -p <PID>
的输出。然而,这有点混乱,并引发了令人讨厌的权限问题——为了连接到现有进程,我需要sudo strace
,并且我更喜欢避免在脚本中使用超级用户权限运行shell命令。
我想知道是否有人有更优雅的建议?
我不太熟悉/proc
的内容,但如果有其他日志文件会列出数据包大小和计数,那么我可能会修改bwmon
以使用它。
不是与编程相关的答案,而是:尝试这样做:
sudo modprobe ip_conntrack
sysctl -w net.netfilter.nf_conntrack_acct=1
全局启用模块和sysctl设置是特定于分发的,但至少在重新启动之前,如果bwmon
需要/proc/net/ip_conntrack
中的bytes
和packets
,它应该可以工作。
基于http://ubuntuforums.org/showthread.php?t=2046187和http://forums.gentoo.org/viewtopic-p-6677939.html(从而最终在谷歌上)。