Я хочу найти определенный процесс, а затем убить его (в сценарии).
Я делаю ps -fu user | grep matching_string
, но это возвращает мне две строки: одну для ожидаемого pid, а другую для pid grep.
Если бы результатом были два столбца, я бы использовал awk, чтобы выбрать первый. Но я не знаю, как выбрать первый результат, когда они возвращаются в виде строки.
2 ответа
Вы можете использовать этот трюк:
ps -fu user | grep matching_strin[g]
Таким образом, совпадение grep
не появится.
Как это работает? (подробнее см. Поиск и завершение процесса в одной строке с помощью bash и регулярного выражения).
- С
ps -fu user | grep matching_string
он перечисляет все процессы, имеющиеgrep matching_string
, так что включает самgrep
. - Выполняя
ps -fu user | grep matching_strin[g]
, вы добавляете регулярное выражение, которое заставляетgrep
пропускать самоgrep
. Почему? Поскольку имя процесса -grep matching_strin[g]
и не соответствует литералуmatching_string
.
Как насчет pkill
?
pkill -U user-id process-name
Похожие вопросы
Связанные вопросы
Новые вопросы
bash
Этот тег предназначен для вопросов о сценариях, написанных для командной оболочки Bash. Сценарии оболочки с синтаксисом или другими ошибками, пожалуйста, проверьте их на https://shellcheck.net, прежде чем публиковать здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут актуальны на Unix & Linux Stack Exchange или Super User, чем на Stack Overflow.
grep
не соответствовал его собственному процессу.