Список аргументов и окружение команды копируются в одно и то же место в памяти при запуске программы. Сообщение об ошибке: «Список аргументов слишком длинный», но на самом деле точная ошибка состоит в том, что список аргументов плюс среда слишком длинный.
Это происходит как часть системного вызова execve
. Большинство, если не все варианты unix имеют ограничение на размер этого временного пространства. Причина этого ограничения состоит в том, чтобы избежать ошибок или вредоносной программы, заставляющей ядро использовать огромный объем памяти за пределами собственного пространства памяти этой программы.
Стандарт POSIX указывает, что максимальный размер этого пространства памяти должен быть не менее ARG_MAX
, и что минимальное значение этого ( _POSIX_ARG_MAX
) равно 4096. На практике большинство вариантов Unix допускают больше, но не 10 МБ. Вы можете проверить значение в вашей системе с помощью getconf ARG_MAX
. В современных системах Linux максимальный размер составляет 2 МБ (с типичными настройками). Традиционно многие системы имели ограничение в 128 КБ. Linux также по-прежнему имеет ограничение 128 КБ для значения одного аргумента или определения переменной среды .
Если вам нужно передать более нескольких сотен байтов информации, передайте ее в файле.
Файл ядра ядра создается при панике ядра. То есть какой-то код в ядре идет не так (общие ошибки - это деление на 0 и выход индекса в массиве). Программа пользовательского пространства сгенерирует ядро в том же состоянии. Однако не при любой перезагрузке генерируется ядро.
Если вы можете позволить себе перезагрузку хоста, вы можете попробовать
echo b > /proc/sysrq-trigger
, это перезагрузит хост в кратчайшие сроки, без каких-либо полезных комментариев к файлам журнала.
Узнать причину перезагрузки хоста - задача долгая и неопределенная. Начните с поиска файлов / var / log.