2011-04-28 75 views
2

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

我想在Linux中这样做。

回答

1

在Linux中,您可以使用setrlimit为进程设置资源限制。 在你的情况下,可以使用RLIMIT_ASRLIMIT_DATA。使用brkmalloc将在达到限制时失败。您可以监视malloc返回的值,并自己发出信号。

+0

如何监控呢?如果它不是一个中断,那么它有什么更好的? – 2011-04-28 04:08:55

+0

您可以检查每次调用malloc时malloc是否返回NULL,并向进程发送用户定义的信号,然后调用信号处理函数 – ousoo 2011-04-29 01:30:33

1

在Linux上执行此操作的一种方法是使用ptrace。然后,您可以使用PTRACE_PEEKUSER查看孩子在进行系统调用时提供给内核的值。你会在寻找像mmap和/或brk这样的东西。被调用的函数是在执行int 80时由EAX中的值定义的(对不起,我不知道每个mmap或brk的数字)。

1

当一个程序开始使用一定数量的内存,如100MB,我想要一个中断被触发,这将导致一个函数运行。

根据要求而定。如果捕获的malloc调用是足够多的,你可能会感兴趣:

如果您还想要捕获brk(2) - (related article),您可能希望遵循一些跟踪解决方案

或二进制指令

相关问题