我需要在使用我的路由器的 Web 界面时启动一些辅助进程,并在一段时间后关闭它们,如果 webface 中的事件停止(在不使用 webface 时节省 RAM)。
有什么方法(除了 prace() )可以知道另一个进程(服务器)何时接受了任何网络连接?
我尝试解析/proc/net/tcp 以获取位于/proc/pidof httpd
/fd 中的套接字 inode,但它非常不可靠,并且只捕获完整的 webface 重新加载,但不捕获导航在上面。
这是我这样写的源代码: https://dl.dropboxusercontent.com/u/100376233/zyxel/nethelperd.tar.bz2
或者:是否有任何方法可以使用 ptrace() 仅捕获 accept() 系统调用,并且如果调用另一个系统调用则不干扰被跟踪的进程?
最佳答案
我建议您将 libpcap
与过滤器一起使用,例如 tcp port X
,其中 X
是托管 Web 界面的端口。每当您收到数据包时,您都可以重置计时器。如果计时器在您收到数据包之前触发,您可以关闭服务。您还可以通过不捕获整个数据包来减少开销。 libpcap
允许您指定要捕获每个数据包的最大字节数。
关于c - 在 C 中观察另一个 linux 进程的网络事件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19988269/