
Eu conheço o argumento "-C" que pode filtrar o comando.
Mas no meu cenário posso ter alguns processos com o mesmo nome de processo e argumentos diferentes.
Como filtrar esses argumentos?
(Eu sei que poderia canalizar para grep mais tarde, mas isso não é 100% preciso. Ou seja: quando um argumento pode conter outro argumento, como se eu quisesse filtrar pela "barra" de argumento nesta lista:
+---------+---------+-----------+
| Process | Command | Arguments |
+---------+---------+-----------+
| 23 | foo | bar |
| 48 | foo | barbaz |
+---------+---------+-----------+
PS: Suponho que a maioria das respostas me recomendará usar "pgrep" em vez de "ps", mas gostaria de evitar isso, se possível.
Responder1
Eu não acho que você possa conseguir isso ps
sozinho. Você está certo ao dizer que filtrar usando grep
não é o ideal, mas se estiver disposto a dar pgrep
uma chance, poderá chegar bem perto de sua necessidade com:
ps -p $(pgrep -f bar -d',')
A -f
opção pgrep
pesquisa a linha de comando completa (em vez de apenas o nome do processo), enquanto a -d
opção especifica o delimitador a ser usado para encadear os pids.
Passar a lista pid ps
limita assim a saída àquelas que contêm a palavra-chave no comando completo (que inclui os argumentos).
No seu exemplo, onde você deseja corresponder "foo bar", mas não "foo barbaz", você procura uma correspondência exata com:
ps -p $(pgrep -f "foo bar$" -d',') # Note the eol anchor '$'
Responder2
Não acredito que tal opção exista - pelo menos não existe na minha versão do ps
. Duvido que muitas ps
implementações por aí tenham essa opção - o nome do comando é bastante simples de definir, o que definitivamente não é o caso quando se trata de argumentos de comando.
De qualquer forma, a filosofia do Unix é encadear muitas ferramentas simples (por exemplo, ps
e grep
) para executar tarefas mais complexas. Alguém poderia argumentar que até ps -C
está forçando isso - na verdade, acredito que o MacOS X ps
não tem essa opção.
O que exatamente você está tentando fazer?O que écontextopara sua pergunta? Porque, pela minha experiência, em 99% dos casos em que as pessoas estão automatizando coisas analisando o resultado, ps
elas estão fazendo tudo o que estão fazendo da maneira errada...