предел длины шаблона pgrep

pgrep ничего не возвращает, если длина шаблона превышает 15 символов. Я не могу найти в справочной странице ничего о максимальной длине паттерна.

Это ошибка?

для целей изложения я создал процесс под названием 12345678901234567890

$ pgrep 12345678901234
5367
$ pgrep 123456789012345
5367
$ pgrep 1234567890123456
$ 
6
задан 16.04.2020, 16:09

2 ответа

Я думаю, что это не ограничение длины шаблона в самом pgrep, а ограничение длины поля comm (command) в файлах / proc / [pid] / stat ( отсюда информация из ps).

Согласно man proc, определения для / proc / [pid] / stat взяты из /usr/src/linux/fs/proc/array.c, так что вам нужно искать там точный ответ. [115 ]

2
ответ дан 16.04.2020, 16:10

Согласно справочной странице pgrep (выделено мной):

Примечания

Имя процесса, используемое для сопоставления, ограничено [1116 ] 15 символов присутствуют на выходе /proc/pid/stat . Используйте опцию -f для сопоставления с полной командной строкой, /proc/pid/cmdline.

Причина в том, что имена процессов ограничены 16 байтами, включая завершающий байт NULL. Из справочной страницы prctl :

PR_SET_NAME (начиная с Linux 2.6.9)

Установите имя вызывающего потока, используя значение в местоположении на что указывает (char *) arg2. Имя может иметь длину до 16 байт, включая завершающий нулевой байт . (Если длина строки, включая завершающий нулевой байт, превышает 16 байтов, строка усекается без уведомления.)

См. Каково максимально допустимое ограничение на длину имя процесса?

3
ответ дан 16.04.2020, 16:10