Esta não é uma limitação de grep
, mas de /proc/PID/cmdline
(tecnicamente, uma decisão de design, não uma limitação). /proc/PID/cmdline
contém a linha de comando completa do processo, com o comando principal e os argumentos separados por ASCII NUL, e o arquivo termina em NUL também. Portanto, grep
imprimirá todo o conteúdo do arquivo se houver uma correspondência. ( ps -ef
obtém o conteúdo deste arquivo como CMD
).
O comprimento máximo é codificado no kernel (Linux) para o 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;
daí 4096 bytes para tal sistema:
% getconf PAGE_SIZE
4096
Além disso, se você tiver caracteres multibyte, o número de caracteres será menor que 4096, como você pode imaginar.