Как мне найти процесс по имени без использования grep?

62

Для поиска процесса вы можете использовать psс grep.

Например, для поиска Firefox

ps aux | grep firefox

Как получить такой же ответ без использования grep?

Maythux
источник
1
Мне любопытно, почему вы хотели бы сделать это, учитывая, что ps/grepрешение работает так хорошо?
нейронет
ОП просто хочет более короткую команду, я думаю. Если бы была такая вещь ps -n <process name>, это отвечало бы его потребностям. ps -n firefoxнемного короче ps | grep firefox. psможет уже фильтровать pidили обрабатывать для идентификатора пользователя, так что это разумный вопрос для фильтрации по имени процесса.
Йохем Шуленклоппер

Ответы:

71

Команда pgrepи ее родной брат pkillсуществуют именно для этой цели:

  • pgrep firefox перечислит все процессы, чьи команды совпадают firefox
  • pgrep -f firefox перечислит все процессы, чьи командные строки совпадают firefox
  • pgrep -x firefox перечислит все процессы, чьи команды точно совпадают firefox
  • ... и так далее.

И, естественно, pgrepисключит себя из матча, поэтому ни один из grepритуалов, связанных с этим, ps | grepне нужен.


Другой набор инструментов для этого является pidofи killallкомандой. Это не так гибко, как pgrepи pkill.

  • pidof firefox будет перечислять процессы, команда которых firefox
Мур
источник
24
ps -fC process-name

пример:

ps -fC firefox

из man ps

  -C cmdlist      Select by command name.
                       This selects the processes whose executable name is
                       given in cmdlist.


 -f              Do full-format listing. This option can be combined
                       with many other UNIX-style options to add additional
                       columns. It also causes the command arguments to be
                       printed. When used with -L, the NLWP (number of
                       threads) and LWP (thread ID) columns will be added. See
                       the c option, the format keyword args, and the format
                       keyword comm.
Maythux
источник
Это лучший ответ, но, к сожалению, не работает на OSX. ps -CФлаг BSD ведет себя совершенно по-другому - «Измените способ вычисления процентного соотношения ЦП»
mastaBlasta
2

topпозволяет искать строку, когда вы нажимаете верхний регистр L; процесс будет выделен, и используйте клавиши со стрелками вверх и вниз для прокрутки списка процессов. Точно так же htopкоманда позволяет выделить конкретный процесс при нажатии /. И \отфильтрует все процессы с определенной строкой в ​​имени.

Для тех , кто любит AWK, вот AWK Oneliner: ps -eF | awk '/process-name/ {print $11}' . С ps -eFименем процесса всегда в 11-м столбце. В качестве альтернативы, если вы ps -eF | awk '{print $11}' | sortполучите отсортированный список имен процессов, отсортированных по алфавиту. Передайте это в lessкоманду просто для просмотра длинного списка файлов.

Сергей Колодяжный
источник
2

Крутой трюк

$ps -ejH

Вы получите все процессы с именами

exmple:
1747   568   568 ?        00:00:00   colord
1833  1832  1832 ?        00:00:00   gnome-keyring-d
2263   568   568 ?        00:00:00   udisksd
2311  2311  2311 ?        00:00:00   cupsd
2315  2315  2311 ?        00:00:00     dbus

Перенаправьте или так скопируйте вывод в файл и затем откройте nano, нажмите Ctrl+, W и вы можете найти нужное имя.

Даниил
источник
1

Вы также можете использовать, htopа затем нажать F4, чтобы отфильтровать результаты по соответствующей пользовательской строке. У вас также есть функция пользовательского поиска, нажав F3.

JoErNanO
источник
1

Если проблема заключается в двух процессах, вы можете использовать только grep:

grep firefox /proc/*/cmdline
user1497298
источник
0

Я только что прочитал псевдоним пс в блоге Леннарта Поэтинга. Выходные данные соответствуют родительской группе systemd:

alias psc='ps xawf -eo pid,user,cgroup,args'
DDPenga
источник