ps -aux -U “user” не фильтрует по пользователю, как ожидалось

Вопрос или проблема

У меня быстрый вопрос. Я бы хотел регулярно выводить все процессы, запущенные под моей учетной записью в Linux. Прочитав инструкцию, я подумал, что мне нужно написать:

ps -aux -U "joshua"

чтобы получить все процессы, запущенные под учетной записью пользователя joshua. Однако эта команда также выводит процессы, запущенные от имени root и других учетных записей. Я что-то упускаю? Почему это происходит?

Спасибо заранее,
Джошуа

Флаг a выбирает все процессы, а -U не ограничивает выбор процессов — другими словами, выбор процессов является только аддитивным.

Если вы уберете флаг a, вы получите результаты, которые вам нужны:

ps ux -U joshua

С -U флаг x избыточен, поэтому это даст те же результаты:

ps u -U joshua

Это даст вам более точные результаты:

root@vm:/root/# ps auxfw | awk '{ if($1 == "postgres"){print $0}}'

postgres 3139615  0.0  0.3 228564 25060 ?        Ss   Sep14   1:26 /usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf
postgres 3139618  0.0  0.0  73060  2020 ?        Ss   Sep14   0:00  \_ postgres: 14/main: logger
postgres 3139626  0.0  0.0 228756  4080 ?        Ss   Sep14   0:01  \_ postgres: 14/main: checkpointer
postgres 3139627  0.0  0.0 228724  2536 ?        Ss   Sep14   0:18  \_ postgres: 14/main: background writer
postgres 3139628  0.0  0.0 228564  6708 ?        Ss   Sep14   0:17  \_ postgres: 14/main: walwriter
postgres 3139629  0.0  0.0 229324  5152 ?        Ss   Sep14   0:48  \_ postgres: 14/main: autovacuum launcher
postgres 3139630  0.0  0.0  74340  3364 ?        Ss   Sep14   1:07  \_ postgres: 14/main: stats collector
postgres 3139631  0.0  0.0 229132  4372 ?        Ss   Sep14   0:01  \_ postgres: 14/main: logical replication launcher

Команда awk будет фильтровать каждую строку, используя первый столбец, и выводить только совпадающие.

Ответ или решение

Здравствуйте, Джошуа.

Вы правильно заметили, что использование команды ps -aux -U "joshua" не фильтрует процессы по пользователю так, как вы ожидали. Причина заключается в том, что опция -a выбирает все процессы, запущенные как всеми пользователями, так и не только теми, которые имеют управляющий терминал, а опция -U добавляет группы процессов, относящихся к указанному пользователю, но не ограничивает выборку только этим пользователем.

Таким образом, чтобы отфильтровать процессы, принадлежащие конкретному пользователю, вам не нужно использовать опцию -a. Попробуйте следующую команду:

ps ux -U joshua

Эта команда будет правильно отображать все процессы, запущенные от имени пользователя "joshua". В этом случае ключ x избыточен, и вы можете использовать:

ps u -U joshua

Тем не менее, если вам нужно получить более точные результаты через фильтрацию, вы можете воспользоваться командой ps aux в сочетании с awk, чтобы отфильтровать вывод по имени пользователя, например:

ps aux | awk '{ if($1 == "joshua"){print $0}}'

Эта команда отобразит все строки, где имя пользователя совпадает с "joshua".

Надеюсь, это поможет вам более эффективно отслеживать процессы, связанные с вашим аккаунтом.

С уважением,
[Ваше Имя]

Оцените материал
Добавить комментарий

Капча загружается...