Linux의 환경 변수 제한이 128KiB 증가했습니다.

Linux의 환경 변수 제한이 128KiB 증가했습니다.

Linux에는 단일 환경 변수의 길이에 대한 기본 제한이 128KiB(131072)인 것 같습니다. envvar를 이보다 길게 설정하고 프로그램을 실행하려고 하면 "인수 목록이 너무 김" 오류가 발생합니다.

이는 구성 매개변수여야 하는 것처럼 보이지만 이를 높일 수 있는 방법을 찾을 수 없습니다. 늘릴 수 있는 방법이 있나요?

이는 빌드 및 테스트 프로세스의 일부로 환경 변수에 긴 파일 목록이나 테스트를 넣으려고 하는 "automake"와 같은 도구에 문제가 됩니다.

답변1

MAX_ARG_STRLENPAGESIZE*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

관련 정보