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