Единственные интерфейсы, предоставляемые ядром Linux для получения лимитов ресурсов: getrlimit()
и /proc/
pid /limits
. getrlimit()
может получить только ограничения на ресурсы вызывающего процесса. /proc/
pid /limits
позволяет получить лимиты ресурсов для любого процесса с тем же идентификатором пользователя и доступен в RHEL 5.2, RHEL 4.7, Ubuntu 9.04 и любом дистрибутиве с 2.6.24 или позже ядро.
Если вам требуется поддержка старых систем Linux, вам нужно будет заставить сам процесс вызывать getrlimit()
. Конечно, самый простой способ сделать это - изменить программу или библиотеку, которую она использует. Если вы запускаете программу, вы можете использовать LD_PRELOAD
для загрузки собственного кода в программу. Если ничего из этого невозможно, вы можете присоединиться к процессу с помощью gdb и заставить его выполнить вызов внутри процесса. Вы также можете сделать то же самое самостоятельно, используя ptrace()
, чтобы присоединиться к процессу, вставить вызов в его память и т. Д., Однако это очень сложно сделать правильно и не рекомендуется.
При наличии соответствующих привилегий другие способы сделать это могут включать просмотр памяти ядра, загрузку модуля ядра или другие изменения ядра, но я предполагаю, что об этом не может быть и речи.