flag para o comando 'ps' que pode filtrar os argumentos?

2

Eu sei o argumento "-C" que pode filtrar no comando.

Mas, no meu cenário, posso ter alguns processos com o mesmo nome de processo e diferentes argumentos.

Como filtrar esses argumentos?

(Eu sei que eu poderia canalizar para grep mais tarde, mas isso não é 100% exato. Ie: quando um arg pode conter outro arg, como se eu quiser filtrar pelo arg "bar" na lista:

+---------+---------+-----------+
| Process | Command | Arguments |
+---------+---------+-----------+
| 23      | foo     | bar       |
| 48      | foo     | barbaz    |
+---------+---------+-----------+

PS: Eu acho que a maioria das respostas vai me recomendar a usar "pgrep" ao invés de "ps", mas eu gostaria de evitar isso se possível.

    
por knocte 09.01.2013 / 14:33

2 respostas

1

Eu não acho que você pode conseguir isso usando ps sozinho. Você está certo de que filtrar usando grep não é o ideal, mas se você está disposto a dar uma chance a pgrep , então você pode chegar bem perto de sua exigência com:

ps -p $(pgrep -f bar -d',')

A opção -f faz com que pgrep pesquise a linha de comando completa (em vez de apenas o nome do processo), enquanto a opção -d especifica o delimitador a ser usado para encadear os pids juntos.

Passar a lista pid para ps limita a saída para aqueles que contêm a palavra-chave no comando completo (que inclui os argumentos).

No seu exemplo em que 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 '$'
    
por 09.01.2013 / 15:34
2

Eu não acredito que tal opção exista - pelo menos não existe na minha versão de ps . Eu duvido que muitas implementações de ps 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.

Em qualquer caso, a filosofia Unix é encadear muitas ferramentas simples (por exemplo, ps e grep ) para executar tarefas mais complexas. Pode-se argumentar que mesmo ps -C está empurrando-o - na verdade, acredito que o MacOS X ps não tem essa opção.

O que exatamente você está tentando fazer? Qual é o contexto para sua pergunta? Porque, da minha experiência, em 99% dos casos em que as pessoas estão automatizando coisas analisando a saída de ps , elas estão fazendo o que estão fazendo da maneira errada ...

    
por 09.01.2013 / 15:23

Tags