Можно ли отфильтровать вывод команды Linux ps по команде пользователя AND?

8

Мне нужен pid для процесса, указанного его владельцем и командой. Я могу отфильтровать процесс для каждого пользователя с помощью «ps -u xxx» и его команды с помощью «ps -C yyy», но когда я пытаюсь «ps -u xxx -C yyy», они объединяются с использованием логики ИЛИ. Мне нужна логика И Как я могу сделать это?

Крумелер
источник

Ответы:

11

Использовать pgrep?

pgrep -U xxx yyy

он возвращает только pid (или pids, если совпадает более одного процесса).

Мариус Гедминас
источник
2

Использовать grep?

ps -u xxx | grep yyy | grep -v grep
RedGrittyBrick
источник
2

Вы используете, commчтобы найти PID, общие для обоих условий:

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

Используя bash, вы можете использовать процесс подстановки, чтобы избежать необходимости во временных файлах:

comm -1 -2 <(ps -u xxx | sort) <(ps -C yyy | sort)
GargantuChet
источник
Работает, большое спасибо. ... Но нет ли более простого способа (без использования pgrep, поскольку это не доступно в моем контексте)?
Геттли
Что не так просто в этом?
GargantuChet
Я знаю, что commделает. Но я использую это только один раз в год. Это не интуитивно для меня. Я предполагаю, что каждый, кто использует это ежедневно, видит это по-другому. Есть веские причины, почему существует pgrep. К сожалению, pgrep не доступен в моем контексте .... Но теперь это решено. Корень проблемы (в соответствии с моей точкой зрения) в том, что мне нужно поддерживать очень старую операционную систему без pgrep.
Геттли