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?

Respostas:


11

Use pgrep?

pgrep -U xxx yyy

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



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)

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.