2011-04-28 76 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),您可能希望遵循一些跟蹤解決方案

或二進制指令

相關問題