Linux / Bash, используя ps -o для получения процесса по определенному имени? - PullRequest
57 голосов
/ 25 сентября 2010

Я пытаюсь использовать команду ps -o, чтобы получить только конкретную информацию о процессах, соответствующих определенному имени.Тем не менее, у меня возникают некоторые проблемы по этому поводу, когда я пытаюсь использовать это даже для того, чтобы просто получить все процессы, например, он просто возвращает подмножество того, что должен вернуть нормальный ps -ef (он не возвращает почти одинаковое числорезультатов, поэтому он не возвращает все запущенные процессы)

ps -ef -o pid,time,comm

Я хочу попробовать что-то вроде этого (ниже), но включить ps -o, чтобы просто получить конкретную информацию из него (только PID)

ps -ef |grep `whoami`| grep firefox-bin

Любой совет, как сделать это правильно, спасибо

Ответы [ 5 ]

93 голосов
/ 25 сентября 2010

Это даст вам PID процесса по имени:

pidof name

Который вы можете затем подключить обратно к PS для более подробной информации:

ps -p $(pidof name)
25 голосов
/ 05 ноября 2012

Это немного устарело, но, думаю, вам нужно: ps -o pid -C PROCESS_NAME, например:

ps -o pid -C bash

РЕДАКТИРОВАТЬ: В зависимости от ожидаемого вида вывода, pgrep будет более элегантным. Насколько я знаю, это специфично для Linux и приводит к тому же результату, что и выше. Например:

pgrep bash
10 голосов
/ 28 апреля 2015
ps -fC PROCESSNAME

ps и grep - опасная комбинация - grep пытается сопоставить все в каждой строке (таким образом, слишком часто встречается: grep -v grep hack).ps -C не использует grep, он использует таблицу процессов для точного соответствия.Таким образом, вы получите точный список с помощью: ps -fC sh, а нахождение каждого процесса с sh где-то в строке.

4 голосов
/ 27 июля 2016

Иногда вам нужно выполнить поиск по имени, в данном случае:

ps aux | grep simple-scan

Пример вывода:

simple-scan  1090  0.0  0.1   4248  1432 ?        S    Jun11   0:00
0 голосов
/ 14 августа 2018

Извините, я сильно опоздал на вечеринку, но я добавлю здесь, что если вы хотите захватить процессы с именами, идентичными вашей строке поиска, вы можете сделать

pgrep -x PROCESS_NAME

-x          Require an exact match of the process name, or argument list if -f is given.
             The default is to match any substring.

Это чрезвычайно полезно, если ваш исходный процесс создал дочерние процессы (возможно, зомби, когда вы запрашиваете), которые ставят префикс имени исходного процесса под своим именем, и вы пытаетесь исключить их из своих результатов. Есть много демонов UNIX, которые делают это. Мой пример перехода ninja-dev-sync .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...