Мне нужен pid для процесса, заданного его владельцем и его командой. Я могу фильтровать процесс для каждого пользователя с помощью «ps -u xxx» и его команды с помощью «ps -C yyy», но когда я пробую «ps -u xxx -C yyy», они объединяются с использованием логики ИЛИ. Мне нужна логика И. Как я могу этого добиться?
Использовать pgrep?
pgrep -U xxx yyy
он возвращает только pid (или pid, если совпадают несколько процессов).
Ты используешь 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)
Использовать grep?
ps -u xxx | grep yyy | grep -v grep