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 '$'