pgrep при запуске от скрипта возвращает другие результаты, чем при запуске в терминале

Я не смог проверить это с другими версиями grep , кроме GNU grep, но там также

grep -e -r

работает как «маскировка» -r ; это может работать и с другими версиями (в отличие от - ).

0
31.01.2019, 15:19
1 ответ

Основная путаница возникает из-за того, что ваш конвейер ps | grepсоответствует имени вашего скрипта, который включает строку upmpdcli.

С pgrepу вас не будет той же проблемы, поскольку pgrepбудет смотреть на имена команд только по умолчанию и не будет ошибочно принимать upmpdcli-checkза upmpdcli.

В идеале вы должны использовать

pgrep -x /usr/bin/upmpdcli

, чтобы получить PID для этого процесса.

Чтобы убить этот процесс или эти процессы, используйте

pkill -x /usr/bin/upmpdcli

То есть,не не используйте PID из pgrep(, так как они могут быть устаревшими ).

Чтобы убить только самый старый upmpdcliпроцесс, используйте pkillс -oи используйте -nдля уничтожения только самого нового. См. руководство pkill.


Также обратите внимание, что

variable=$( echo `somecommand` )

лучше писать как

variable=$( some_command )

если вы не полагаетесь на тот факт, что оболочка будет выполнять разбиение слов и расширение имени файла на результатsome_command(вы не ).

3
28.01.2020, 02:23

Теги

Похожие вопросы