Может ли прерывание быть запрограммировано так? - PullRequest
2 голосов
/ 28 апреля 2011

Я создаю оболочку, которая может порождать программы в фоновом режиме.Когда программа начинает использовать определенный объем памяти, например, 100 МБ, я хочу, чтобы сработало прерывание, которое вызовет выполнение функции.Альтернативой является запуск процесса и проверка состояния фоновых процессов.Использование прерывания требует меньше ресурсов процессора.Это верно?Возможно ли это сделать?

Я пытаюсь сделать это в Linux.

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Один из способов сделать это в Linux - использовать ptrace. Затем вы должны использовать PTRACE_PEEKUSER, чтобы посмотреть значения, которые дочерний элемент передает ядру, когда он выполняет системные вызовы. Вы бы искали такие вещи, как mmap и / или brk. Вызываемая функция определяется значением в EAX при выполнении int 80 (извините, случайно, я не знаю номеров для каждого mmap или brk).

1 голос
/ 22 августа 2011

Когда программа начинает использовать определенный объем памяти, например, 100 МБ, я хочу, чтобы сработало прерывание, которое приведет к запуску функции.

В зависимости от требований. Если вам достаточно перехватить вызовы malloc, вам может быть интересно:

Если вы хотите захватить brk (2) , а также - ( связанную статью ), вы можете воспользоваться некоторыми решениями для отслеживания

или бинарные приборы

1 голос
/ 28 апреля 2011

В Linux вы можете установить ограничение ресурса для процесса с помощью setrlimit. В вашем случае можно использовать RLIMIT_AS или RLIMIT_DATA. malloc, который использует brk, потерпит неудачу при достижении лимита. Вы можете отслеживать значение, возвращаемое malloc, и самостоятельно подавать сигнал.

...