Итак, моя система перешла на DOS, или я только что открыл какой-то огромный файл (openstreetmaps planet.osm). Система полностью не отвечает ... настолько не отвечает, что потребуется около 10 минут, чтобы войти в мою оболочку, запустить ее и убить вызывающий нарушение процесс. Я готов нажать кнопку сброса.
Вопрос: можно ли выделить определенный минимальный объем системных ресурсов, чтобы, если моя система будет привязана, у меня все еще будет 2% процессора (система 2 ГГц ~ 40 МГц! - должно быть достаточно для оболочки, верно? Я имею в виду, что это сработало в начале 90-х) где-то отложили? Или каким-то образом сдерживать преступные процессы?
Я бываю в таких ситуациях, когда мне хочется, чтобы ОС сдерживала неконтролируемые процессы, чтобы я все еще мог использовать систему, даже если это означало падение производительности на 10% в целом. Умение действовать в подобных ситуациях вместо того, чтобы быть полностью беспомощным, было бы ... приятно.
Вы можете написать сценарий для поиска процессов, запущенных на tty0 или ttyS0, или где угодно, где вам нужен приоритетный вход root, и установить для этих процессов приоритет планирования в реальном времени. Сам скрипт должен запускаться с приоритетом реального времени.
Получить доступ к памяти во время шторма подкачки - более сложная задача. Вы можете использовать cgroups Linux. Вы можете написать программу на C вместо сценария и использовать mlockall для блокировки его памяти в RAM. Затем эта программа может использовать ptrace, чтобы проникнуть в другие процессы и заставить их вызвать mlockall. Вы можете использовать это, чтобы получить оболочку bash, на которую не влияет свопинг.
Если вы не программист или не можете найти кого-то, кто уже написал эти (я не писал) cgroups, вероятно, более простой способ зарезервировать некоторую высокоприоритетную память.
Забавно, что ты говоришь "мило". Одно из решений состоит в том, чтобы «переназначить» вызывающий нарушение процесс, чтобы он не загружал процессор (существенно снизив приоритет приложения).
Чтобы запустить процесс с более низким приоритетом:
nice <program> &
Чтобы изменить приоритет запущенного процесса:
renice 4 <program>
Шкала приоритетов варьируется от -20 до 20. 0 - по умолчанию, 20 - самый низкий приоритет, -20 - самый высокий приоритет.