
Мне нужно посчитать количество процессов emacs на машине, которую я использую удаленно, используя команду ps -Af. С чего мне вообще начать?
решение1
ps -Af
это не лучший подход.
Эта f
опция излишняя и может вызвать ложное срабатывание, если процессы, не являющиеся emacs, используют emacs или строку, содержащую его, в качестве одного из своих параметров, не говоря уже о (маловероятном) случае пользователя с именем emacs.
Я бы предложил использовать эту более простую команду:
pgrep emacs | wc -l
решение2
ты можешь сделатьps -C emacs --no-heading | wc -l
ps -C command
вывести процессы по имени команды
EDIT: ps --help
очень интересно
решение3
Как сказал Хеннес, вы можете использовать " ps -AF | grep emacs | wc -l
", чтобы сделать это. Но у вас также будет своя собственная команда. Чтобы избавиться от этой команды(команд), вы можете использовать " grep -v
" (или --inverted-match
), чтобы отфильтровать команды, которые вы не хотите учитывать. Так что это будет выглядеть так:ps -AF | grep emacs | grep -v grep | wc -l
решение4
Начните с первых принципов.
Начните с установления того, что именно делает команда, которую вам было предложено использовать, и как -Af
работают указанные параметры ( ). Для этого прочитайте man ps
:
-A Выбрать все процессы.
-f Выполнять полноформатный листинг. Эту опцию можно комбинировать со многими другими опциями в стиле UNIX для добавления дополнительных столбцов.
Итак, отправной точкой является вывод всех процессов, запущенных для вашего пользователя, перечисленных в полном формате. Выполните команду, чтобы увидеть полный вывод, прежде чем пытаться выполнить какую-либо обработку:
ps -Af
Чтобы подсчитать emacs
процессы, вам нужно будет передать выходные данные через инструмент фильтрации для обработки выходных данных и/или подсчета соответствующих совпадений. grep
Это хороший вариант, но для эффективности и простоты я бы использовал awk
:
ps -Af | awk '/emacs/ && !/awk/ { a++ } END { print a }'
При этом выполняется поиск по шаблону /emacs/
, исключается шаблон самого поиска, !/awk/
увеличивается количество совпадений { a++ }
, а затем выводится общее количество { print a }
.
Для этого требуется только один канал, и это элегантно решает проблему отсутствия возврата процесса поиска в вашем подсчете.