
Я знаю аргумент «-C», который может фильтровать команду.
Но в моем сценарии могут быть некоторые процессы с одинаковым именем и разными аргументами.
Как отфильтровать по этим аргументам?
(Я знаю, что позже я мог бы передать данные в grep, но это не на 100% точно. Например: когда аргумент может содержать другой аргумент, например, если я хочу отфильтровать по аргументу «bar» в этом списке:
+---------+---------+-----------+
| Process | Command | Arguments |
+---------+---------+-----------+
| 23 | foo | bar |
| 48 | foo | barbaz |
+---------+---------+-----------+
PS: Я предполагаю, что большинство ответов порекомендуют мне использовать «pgrep» вместо «ps», но я бы хотел избежать этого, если это возможно.
решение1
Я не думаю, что вы можете достичь этого, используя ps
в одиночку. Вы правы, что фильтрация с использованием grep
не идеальна, но если вы готовы дать pgrep
шанс, то вы можете довольно близко подойти к вашему требованию с помощью:
ps -p $(pgrep -f bar -d',')
Параметр -f
заставляет выполнять pgrep
поиск по всей командной строке (а не только по имени процесса), а -d
параметр указывает разделитель, который будет использоваться для объединения идентификаторов процессов.
Передача списка pid ps
таким образом ограничивает вывод теми, которые содержат ключевое слово в полной команде (включая аргументы).
В вашем примере, где вы хотите найти соответствие «foo bar», но не «foo barbaz», вы ищете точное совпадение с помощью:
ps -p $(pgrep -f "foo bar$" -d',') # Note the eol anchor '$'
решение2
Я не верю, что такая опция существует — по крайней мере, ее нет в моей версии ps
. Я сомневаюсь, что ps
во многих реализациях есть такая опция — имя команды довольно просто определить, чего определенно не происходит, когда дело доходит до аргументов команды.
В любом случае, философия Unix заключается в том, чтобы связать множество простых инструментов (например, ps
и grep
) для выполнения более сложных задач. Можно утверждать, что ps -C
это даже навязывание - на самом деле я считаю, что у MacOS X ps
нет такой возможности.
Что именно ты пытаешься сделать?Чтоконтекстна ваш вопрос? Потому что, исходя из моего опыта, в 99% случаев, когда люди автоматизируют что-то, анализируя вывод, ps
они делают что-то неправильно...