pgrep limite de comprimento padrão

6

O pgrep não retorna nada se o comprimento do padrão for maior que 15 caracteres. Não consigo encontrar nada na página man sobre o tamanho máximo do padrão.

Isso é um bug?

para fins de exposição, criei um processo chamado 12345678901234567890

$ pgrep 12345678901234
5367
$ pgrep 123456789012345
5367
$ pgrep 1234567890123456
$ 
    
por monzie 18.10.2013 / 16:55

2 respostas

2

Eu acho que não é um limite no tamanho do padrão em pgrep , mas um limite no comprimento do campo comm (comando) nos arquivos / proc / [pid] / stat (que é de onde vem a informação em ps ).

De acordo com man proc , as definições para / proc / [pid] / stat são provenientes de /usr/src/linux/fs/proc/array.c então você precisaria procurar uma resposta definitiva.

    
por steeldriver 18.10.2013 / 17:38
3

De acordo com a pgrep man page (grifo meu):

  

Notas

     

O nome do processo usado para correspondência é limitado aos 15 caracteres presentes na saída de /proc/pid/stat . Use a opção -f para corresponder à linha de comando completa, /proc/pid/cmdline .

O motivo é que os nomes dos processos são limitados a 16 bytes, incluindo o byte de terminação NULL . De a prctl manpage :

  

PR_SET_NAME (desde o Linux 2.6.9)

     

Defina o nome do encadeamento de chamada, usando o valor no local apontado por (char *) arg2 . O nome pode ter até 16 bytes, incluindo o byte nulo de terminação . (Se o comprimento da string, incluindo o byte nulo de terminação, exceder 16 bytes, a string será silenciosamente truncada.)

    
por phuclv 17.08.2016 / 07:40

Tags