La sortie de la commande Linux ps peut-elle être filtrée par l'utilisateur ET la commande?

8

J'ai besoin du pid pour un processus étant donné son propriétaire et sa commande. Je peux filtrer un processus par utilisateur avec "ps -u xxx" et sa commande par "ps -C yyy", mais quand j'essaie "ps -u xxx -C yyy", ils sont combinés en utilisant la logique OU. J'ai besoin ET de logique. Comment puis-je accomplir cela?

Krumelur
la source

Réponses:

11

Utiliser pgrep?

pgrep -U xxx yyy

il ne renvoie que le pid (ou pids, si plusieurs processus correspondent).

Marius Gedminas
la source
2

Utilisez grep?

ps -u xxx | grep yyy | grep -v grep
RedGrittyBrick
la source
2

Vous utilisez commpour trouver des PID communs aux deux conditions:

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

En utilisant bash, vous pouvez utiliser la substitution de processus pour éviter d'avoir besoin de fichiers temporaires:

comm -1 -2 <(ps -u xxx | sort) <(ps -C yyy | sort)
GargantuChet
la source
Ça marche, merci beaucoup. ... Mais n'y a-t-il pas de moyen plus simple (sans utiliser pgrep, car ce n'est pas disponible dans mon contexte)?
guettli
Qu'est-ce qui n'est pas facile à ce sujet?
GargantuChet
Je sais ce que commça fait. Mais je ne l'utilise qu'une fois par an. Ce n'est pas intuitif pour moi. Je suppose que tous ceux qui l'utilisent quotidiennement voient cela différemment. Ce sont de bonnes raisons pour lesquelles pgrep existe. Malheureusement pgrep n'est pas disponible dans mon contexte .... Mais c'est résolu maintenant. La racine du problème est (selon mon point de vue), que je dois prendre en charge le très ancien système d'exploitation sans pgrep.
guettli