Linux 似乎对任何单个环境变量的长度都有 128KiB (131072) 的默认限制——任何尝试将 envvar 设置得比这个长,然后运行任何程序都会导致“参数列表太长”错误。
这看起来应该是一个配置参数,但我一直找不到任何方法来提高它。有什么办法可以增加吗?
对于像“automake”这样的工具来说,这是有问题的,这些工具试图将长列表的文件或测试放在环境变量中作为构建和测试过程的一部分。
答案1
MAX_ARG_STRLEN
是一个常数,定义PAGESIZE*32
如下include/uapi/linux/binfmts.h
。如果不重新编译内核,则无法更改其值。
/*
* These are the maximum length and maximum number of strings passed to the
* execve() system call. MAX_ARG_STRLEN is essentially random but serves to
* prevent the kernel from being unduly impacted by misaddressed pointers.
* MAX_ARG_STRINGS is chosen to fit in a signed 32-bit integer.
*/
#define MAX_ARG_STRLEN (PAGE_SIZE * 32)
#define MAX_ARG_STRINGS 0x7FFFFFFF