方法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に設定しても、作成できる最長のコマンドラインはシステムメモリを256KBしか占有しないため、これは完全に予想されたものであり、今日のシステムハードウェア標準ではそれほど多くありません。
方法#4の利点は明らかです。これで、通常どおりコマンドを簡単に実行できるようになり、正常に完了します。欠点も同様に明らかです。コマンドラインで使用可能なメモリの量を使用可能なシステムメモリの量を超えて増やすと、自分のシステムでDOS攻撃を作成してクラッシュさせることができます。特にマルチユーザーシステムでは、すべてのユーザーに追加のメモリが割り当てられるため、わずかな増加でも大きな影響を与える可能性があります。そのため、方法#4が実行可能なオプションであるかどうかを判断する最も安全な方法であるため、常に独自の環境で広範囲にテストしてください。