Найти процесс с помощью pgrep в формате сначала_слово+пробел+*?
Нужно найти процесс начинающийся со слова gpg далее пробел и далее любые другие слова/символы. Делаю так
$ pgrep -n "^gpg[[:blank:]]*"
1190
$ ps 1190
PID TTY STAT TIME COMMAND
1190 ? SLs 0:00 /usr/bin/gpg-agent --supervised
По идее должно ничего найти поскольку у процесса 1190 после gpg следует тире, а не пробел. Не знаю как исправить, вроде все правильно.
Ответы (2 шт):
[[:blank:]]* где * означает что пробелов может быть 0(ноль) или больше, если хотите 1 или больше пробелов то тогда ставьте + вместо *
pgrep по умолчанию ищет в имени исполнимого файла. Ваша строка поиска подразумевает, что вам нужен исполнимый файл, внутри которого пробел. Вы уверены, что хотите именно этого? Если вам нужно строго процесс gpg, то ищите pgrep -n '^gpg$'
Если же вам нужно искать внутри командной строки, то нужно добавить ключ -f. Однако в этом случае вы не найдёте /usr/bin/gpg bla-bla, так как строка начинается с /usr/bin/. Нужно искать pgrep -n -f '(^|/)gpg ' - после gpg достаточно поставить пробел.
Ну и чтобы два раза не вставать, можно добавить ключ -a, который выведет номер процесса и командную строку