Это ограничение не для grep
, а для / proc / PID / cmdline
(технически проектное решение, а не ограничение). / proc / PID / cmdline
содержит полную командную строку процесса с основной командой и аргументами, разделенными ASCII NUL, и файл заканчивается также NUL. Итак, grep
распечатает все содержимое файла, если есть совпадение. ( ps -ef
получает содержимое этого файла как CMD
).
Максимальная длина жестко запрограммирована в ядре (Linux) на PAGE_SIZE
:
static int proc_pid_cmdline(struct task_struct *task, char * buffer)
{
int res = 0;
unsigned int len;
struct mm_struct *mm = get_task_mm(task);
if (!mm)
goto out;
if (!mm->arg_end)
goto out_mm; /* Shh! No looking before we're done */
len = mm->arg_end - mm->arg_start;
if (len > PAGE_SIZE)
len = PAGE_SIZE;
, следовательно, 4096 байт для такой системы:
% getconf PAGE_SIZE
4096
Кроме того, если у вас есть многобайтовые символы, количество символов будет меньше 4096, как вы понимаете.