A saída do comando ps do Linux pode ser filtrada pelo comando AND do usuário?

8

Preciso do pid para um processo, dado o proprietário e o comando. Posso filtrar um processo por usuário com "ps -u xxx" e seu comando com "ps -C yyy", mas quando tento "ps -u xxx -C yyy", eles são combinados usando a lógica OR. Eu preciso de lógica. Como posso fazer isso?

Krumelur
fonte

Respostas:

11

Use pgrep?

pgrep -U xxx yyy

retorna apenas o pid (ou pids, se mais de um processo corresponder).

Marius Gedminas
fonte
2

Use grep?

ps -u xxx | grep yyy | grep -v grep
RedGrittyBrick
fonte
2

Você usa commpara encontrar PIDs comuns a ambas as condições:

ps -u xxx | sort > /tmp/ps-uxxx
ps -C yyy | sort > /tmp/ps-Cyyy
comm -1 -2 /tmp/ps-uxxx /tmp/ps-Cyyy

Usando o bash, você pode usar a substituição de processo para evitar a necessidade de arquivos temporários:

comm -1 -2 <(ps -u xxx | sort) <(ps -C yyy | sort)
GargantuChet
fonte
Funciona, muito obrigado. ... Mas não há uma maneira mais fácil (sem usar o pgrep, pois isso não está disponível no meu contexto)?
guettli
O que não é fácil nisso?
precisa
Eu sei o que commfaz. Mas eu uso apenas uma vez por ano. Não é intuitivo para mim. Eu acho que todo mundo que usa diariamente vê isso diferente. Existem boas razões para o pgrep existir. Infelizmente, o pgrep não está disponível no meu contexto ... Mas está resolvido agora. A raiz do problema é (de acordo com o meu ponto de vista), que eu preciso suportar o sistema operacional muito antigo sem o pgrep.
guettli