Горстка производителей дисков осуществляет regioning на аппаратном уровне, который был проблемой, которую я имел на своем MacBook. Если вышеупомянутые ответы не работают, можно исследовать диск видеть, является ли это ситуацией.
Подсчитайте записи в / proc /
. Жесткие и мягкие ограничения, применяемые к процессу, можно найти в / proc /
Вы можете попробовать написать сценарий, который периодически вызывает lsof -p {PID}
для данного pid.
Единственными интерфейсами, предоставляемыми ядром 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 ()
, чтобы присоединиться к процессу, вставить вызов в его память и т. Д., Однако это очень сложно сделать правильно и не рекомендуется.
С соответствующими привилегиями другие способы сделать это будут включать просмотр памяти ядра, загрузку модуля ядра или иное изменение ядра, но я предполагаю, что это исключено.
Вы запросили методы bash / python. ulimit был бы лучшим подходом для bash (если не брать в расчет / proc / $ pid / fd
и т.п. вручную). Для python вы можете использовать модуль ресурсов.
import resource
print(resource.getrlimit(resource.RLIMIT_NOFILE))
$ python test.py (1024, 65536)
resource.getrlimit
соответствует вызову getrlimit
в программе на языке C. Результаты представляют текущее и максимальное значения для запрошенного ресурса. В приведенном выше примере текущее (мягкое) ограничение составляет 1024. Эти значения являются типичными значениями по умолчанию для современных систем Linux.