Найти процесс с помощью pgrep в формате сначала_слово+пробел+*?

Рейтинг: 0Ответов: 2Опубликовано: 25.02.2023

Нужно найти процесс начинающийся со слова gpg далее пробел и далее любые другие слова/символы. Делаю так

$ pgrep -n "^gpg[[:blank:]]*"
1190
$ ps 1190
    PID TTY      STAT   TIME COMMAND
   1190 ?        SLs    0:00 /usr/bin/gpg-agent --supervised

По идее должно ничего найти поскольку у процесса 1190 после gpg следует тире, а не пробел. Не знаю как исправить, вроде все правильно.

Ответы

▲ 1

pgrep по умолчанию ищет в имени исполнимого файла. Ваша строка поиска подразумевает, что вам нужен исполнимый файл, внутри которого пробел. Вы уверены, что хотите именно этого? Если вам нужно строго процесс gpg, то ищите pgrep -n '^gpg$'

Если же вам нужно искать внутри командной строки, то нужно добавить ключ -f. Однако в этом случае вы не найдёте /usr/bin/gpg bla-bla, так как строка начинается с /usr/bin/. Нужно искать pgrep -n -f '(^|/)gpg ' - после gpg достаточно поставить пробел.

Ну и чтобы два раза не вставать, можно добавить ключ -a, который выведет номер процесса и командную строку

▲ 0

[[:blank:]]* где * означает что пробелов может быть 0(ноль) или больше, если хотите 1 или больше пробелов то тогда ставьте + вместо *