我正在创建一个可以在后台生成程序的shell。当一个程序开始使用一定量的内存,比如100MB时,我希望触发一个中断,这将导致一个函数运行。另一种方法是让进程继续运行并检查后台进程的状态。使用中断似乎使用较少的CPU资源。那是对的吗?有可能这样做吗?
我正在尝试在Linux中执行此操作。
答案 0 :(得分:1)
在Linux中,您可以使用setrlimit
为流程设置资源限制。
在您的情况下,可以使用RLIMIT_AS
或RLIMIT_DATA
。使用malloc
的{{1}}将在达到限制时失败。您可以监控brk
返回的值,并自行发出信号。
答案 1 :(得分:1)
在Linux上执行此操作的一种方法是使用ptrace
。然后,您可以使用PTRACE_PEEKUSER查看子进行系统调用时子进程提供给内核的值。你会找到像mmap和/或brk这样的东西。当执行int 80时,被调用的函数由EAX中的值定义(抱歉,我不知道每个mmap或brk的数字)。
答案 2 :(得分:1)
当一个程序开始使用一定数量的内存,比如100MB时,我希望触发一个中断,这将导致一个函数运行。
根据要求而定。如果你想要捕捉malloc调用,你可能会感兴趣:
如果您想捕获brk(2) - (related article),您可能想要了解一些跟踪解决方案
或二元仪器