Intereting Posts
Наушники JBL должны подключаться дважды, чтобы получить хорошее качество звука (элементарные os и мята) Изменение размера и обрезка изображений с соотношением сторон 6×4 с шириной 1024 пикселя Понять день в жизни сообщения журнала Apache в современной Linux-системе Возможности передачи через exec Невозможно ssh туннель при подключении к VPN Подача звука с микрофона в питон «Конфликтующее распространение: InRelease (ожидаемый выпуск, но получил релиз + 1)», что это такое? Установка GRUB_DISABLE_LINUX_UUID = true в / etc / default / grub не работает как ожидалось UNIX Script не читает папки с пробелами GRUB2 видит загрузчик Windows 10, если окна были установлены после GRUB в GPT / EFI? Переносимость исполняемого файла другой машине Linux Частная VLAN под Linux? Как сказать apt-get переключиться с Sources.bz2 на Sources.gz Как найти слово после заданного шаблона с помощью разреза? как обновить прошивку принтера epson xp 211 в Linux?

pgrep полный матч не работает, только часть, почему?

Я использую pgrep из procps-3.3.10.

Если у меня есть исполняемый файл aout_abcdefgh_ver27 , тогда

 pgrep aout_abcdefgh_ver27 

ничего не возвращает, а ps aux | grep aout_abcdefgh_ver27 ps aux | grep aout_abcdefgh_ver27 возвращает ожидаемый результат:

 ps aux | grep aout_abcdefgh_ver27 evgeniy 14806 0.0 0.0 4016 672 pts/8 S 12:50 0:00 ./aout_abcdefgh_ver27 evgeniy 15241 0.0 0.0 12596 2264 pts/8 S+ 12:50 0:00 grep --colour=auto aout_abcdefgh_ver27 

Но если я забегу

 $ pgrep aout_abcdefgh_v 14806 

pgrep возвращает то, что я ожидаю, поэтому я удивляюсь, почему это работает так странно, может быть, мне нужно использовать какой-то параметр для pgrep для работы с полным именем процесса?

Похоже, у него очень короткий предел для шаблона, что-то вроде ~ 10 символов.

Проблема в том, что по умолчанию pgrep ищет только имя процесса. Имя – это усеченная версия всей команды. Вы можете узнать, что такое имя, если посмотреть на /proc/PID/status где PID – это идентификатор процесса соответствующего процесса. Например:

 $ ./aout_abcdefgh_ver27 & [1] 14255 ## this is the PID $ grep Name /proc/14255/status Name: aout_abcdefgh_v 

Так что да, pgrep без флагов считывает только первые 15 символов имени исполняемого файла. Чтобы выполнить поиск в полной командной строке, используемой для ее запуска, вам нужен флаг -f (от man pgrep ):

 -f, --full The pattern is normally only matched against the process name. When -f is set, the full command line is used. 

Итак, если вы используете -f :

 $ pgrep -f aout_abcdefgh_ver27 14255