Dòng lệnh của bạn dài bao nhiêu?
Nếu nó nằm trong phạm vi megabyte, có lẽ bạn có thể biên dịch lại kernel của bạn với tệp lớn hơn ARG_MAXtrong linux-3.*/include/linux/limits.htệp của bạn . Tôi đặt ở đó
#define ARG_MAX 2097152 /* # bytes of args + environ for exec() */
(cũng có thể có một cách để thiết lập giới hạn đó một cách linh hoạt, nhưng tôi quên mất làm thế nào và tôi có thể sai)
Tôi thích ARG_MAXgiới hạn lớn vì thỉnh thoảng tôi sử dụng **/*.ctính năng mở rộng toàn cầu zshlà vỏ tương tác của tôi.
Đừng đặt một giá trị lớn vào ARG_MAX; Tôi đoán rằng bạn muốn có nó ít hơn 2% RAM có sẵn của bạn.
Lưu ý rằng /proc/*/cmdlinecó chứa byte rỗng. Bạn có thể dịch chúng, xem cái này .
phụ lục
nếu vì bất kỳ lý do gì bạn không thể mua một dòng lệnh lớn, hãy tìm một số cách và quy ước để tránh có một số lượng lớn các đối số chương trình như vậy. Chẳng hạn, bạn có thể sửa đổi chương trình được gọi để đọc một số thứ từ một tệp hoặc một số nguồn khác (cơ sở dữ liệu?). Ví dụ, một số chương trình Unix (ví dụ GCC) chấp nhận @tên tệp để đọc các tùy chọn từ một số tệp có tên tệp .
ps -efwwww | grep <command name>chưa