Я хочу найти определенный процесс, а затем убить его (в сценарии).

Я делаю ps -fu user | grep matching_string, но это возвращает мне две строки: одну для ожидаемого pid, а другую для pid grep.

Если бы результатом были два столбца, я бы использовал awk, чтобы выбрать первый. Но я не знаю, как выбрать первый результат, когда они возвращаются в виде строки.

0
user1351781 27 Мар 2014 в 16:27

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.
1
Community 23 Май 2017 в 15:28
Это сработало. Например, я написал [j]ava, но команда grep не отображалась. Я собираюсь принять ваше, так как это было первое, что я прочитал и сработал. осталось 7 минут.
 – 
user1351781
27 Мар 2014 в 16:31
Да! Вы можете разместить его в любое время, суть в том, чтобы добавить регулярное выражение, чтобы grep не соответствовал его собственному процессу.
 – 
fedorqui
27 Мар 2014 в 16:34

Как насчет pkill?

pkill -U user-id process-name
2
ElmoVanKielmo 27 Мар 2014 в 16:30