Tăng giới hạn 128KiB cho các biến môi trường trong Linux


10

Linux dường như có giới hạn mặc định là 128KiB (131072) về độ dài của bất kỳ biến môi trường đơn lẻ nào - mọi nỗ lực đặt envvar dài hơn mức này và sau đó chạy bất kỳ chương trình nào cũng sẽ dẫn đến lỗi list Danh sách đối số quá dài '.

Đây có vẻ như là một tham số cấu hình, nhưng tôi không thể tìm ra cách nào để nâng cao nó. Có cách nào để tăng nó không?

Vấn đề là các công cụ như "automake" cố gắng tập hợp các danh sách dài các tệp hoặc kiểm tra trong một biến môi trường như là một phần của quá trình thử nghiệm và xây dựng của chúng.



@ NarūnasK: Không hữu ích lắm vì chỉ nói về giới hạn trên tổng số tất cả các đối số và envvars, không giới hạn cho mỗi envvar.
Chris Dodd

Bạn đã kiểm tra phần: Số lượng đối số và độ dài tối đa của một đối số ? Có một gợi ý về MAX_ARG_STRLEN (131072)
NarnasK

2
Cũng hãy xem ở đây . Nó thảo luận chính xác vấn đề của bạn.
NarnasK

3
MAX_ARG_STRLENlà một hằng số được định nghĩa như PAGESIZE*32trong /path/to/linux/headers/include/uapi/linux/binfmts.h. Không thể thay đổi mà không biên dịch lại kernel.
AlexP

Câu trả lời:


5

MAX_ARG_STRLENlà một hằng số được định nghĩa như PAGESIZE*32trong include/uapi/linux/binfmts.h. Giá trị của nó không thể thay đổi mà không biên dịch lại kernel.

/*
 * 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.