可以像这样编程中断吗?

时间:2011-04-28 03:12:03

标签: c++ linux process interrupt

我正在创建一个可以在后台生成程序的shell。当一个程序开始使用一定量的内存,比如100MB时,我希望触发一个中断,这将导致一个函数运行。另一种方法是让进程继续运行并检查后台进程的状态。使用中断似乎使用较少的CPU资源。那是对的吗?有可能这样做吗?

我正在尝试在Linux中执行此操作。

3 个答案:

答案 0 :(得分:1)

在Linux中,您可以使用setrlimit为流程设置资源限制。 在您的情况下,可以使用RLIMIT_ASRLIMIT_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),您可能想要了解一些跟踪解决方案

或二元仪器

相关问题