Метод №4 включає вручну збільшення кількості сторінок, які виділяються в ядрі для аргументів командного рядка. Якщо ви подивитеся на файл include / linux / binfmts.h, ви знайдете наступне вгорі:
/*
* MAX_ARG_PAGES defines the number of pages allocated for arguments
* and envelope for the new program. 32 should suffice, this gives
* a maximum env+arg of 128kB w/4KB pages!
*/
#define MAX_ARG_PAGES 32
Щоб збільшити об'єм пам'яті, присвяченої аргументам командного рядка, вам просто потрібно надати значення MAX_ARG_PAGES з більшим числом. Після збереження цього редагування просто перекомпілюйте, встановіть і перезавантажте нове ядро так, як це робили зазвичай.
В моїй власній тестовій системі мені вдалося вирішити всі свої проблеми, підвищивши це значення до 64. Після обширного тестування я не відчував жодної проблеми з часу перемикання. Це цілком очікувано, оскільки навіть при MAX_ARG_PAGES
встановленому рівні 64, найдовший можливий командний рядок, який я міг би створити, займав би лише 256 Кб системної пам’яті - це не дуже багато сучасних стандартів системного обладнання.
Переваги методу №4 зрозумілі. Тепер ви можете просто запустити команду, як зазвичай, і вона успішно завершується. Недоліки однаково очевидні. Якщо збільшити обсяг пам’яті, доступного в командному рядку, перевищує об’єм доступної системної пам’яті, ви можете створити атаку DOS на власну систему і призвести до її краху. Зокрема, на багатокористувацькі системи навіть невелике збільшення може мати суттєвий вплив, тому що кожному користувачеві надається додаткова пам'ять. Тому завжди ретельно перевіряйте у своєму власному середовищі, оскільки це найбезпечніший спосіб визначити, чи метод №4 є життєздатним варіантом для вас.
Я згоден, що обмеження серйозно дратує.