Вопрос или проблема
У меня быстрый вопрос. Я бы хотел регулярно выводить все процессы, запущенные под моей учетной записью в 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".
Надеюсь, это поможет вам более эффективно отслеживать процессы, связанные с вашим аккаунтом.
С уважением,
[Ваше Имя]