Как получить pgrep для отображения полной информации о процессе


27

Есть ли способ, чтобы pgrepдать мне всю информацию о каждом процессе, который psделает? Я знаю , что могу трубу psчерез , grepно это много печатать , и это также дает мне grepсам процесс , который я не хочу.

Ответы:


22

pgrepПараметры вывода довольно ограничены. Вам почти наверняка потребуется отправить его обратно, psчтобы получить важную информацию. Вы можете автоматизировать это, используя функцию bash в вашем ~/.bashrc.

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

Затем вызовите команду с помощью.

ppgrep <pattern>

2
Благодарность! Я изменил его на: function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } В противном случае, если ни один из процессов не соответствует вашему поиску, он psвыдает целую мегиллу использования.
— JoelFan

На OS X psнужен дефис для флагов:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
— Эрик Номич

1
Если вы хотите избежать использования страницы ps, в GNU xargs есть опция, -rкоторая будет выполнять команду, только если она получила список.
— Дуг

1
Более сжатый способps fp $(pgrep -d, "$@")
— Игорь Микушкин

15

Объединить pgrepс psиспользованием xargs!

pgrep <your pgrep-criteria> | xargs ps <your ps options> -p

Например попробуйте

pgrep -u user | xargs ps -f -p

чтобы получить полный список процессов user.

Приятно, что вы сохраняете первую строку с именами столбцов. grepвсегда отбрасывает имена столбцов.


превосходно! это решает странную проблему со скриптом запуска сервера arcgis для xfvb
— prusswan

Это должен быть принятый ответ, потому что он должным образом использует каналы Unix, беря список PID из одного инструмента и возвращая их в другой (если это выглядит как хакерство, это не так - этот метод можно использовать в LOTS инструментов UNIX Как и инструменты электронной почты grep. Функция Bash ppgrep () является ненужной зависимостью и позволяет избежать возможности обучения, представленной здесь.)
— Скотт Прайв,

Для объяснения параметров - -u= только сопоставлять процессы, чей эффективный идентификатор пользователя указан в списке (см. pgrepСсылку linux.die.net/man/1/pgrep ) -f= полный список форматов, -p= выбирать по PID (см. psСсылку - man7.org/linux/man -pages / man1 / ps.1.html )
— Chris Halcrow

10

Следующее дает только PID + полная командная строка. Для "вся информация psделает", см. Другие ответы ...

Большинство linux использует procps-ng . Начиная с версии 3.3.4 (выпущена в 2012 году), pgrep -a( --list-full) показывает полную командную строку.
Примечание: по умолчанию pgrep соответствует только шаблону, который вы даете против имени исполняемого файла. Если вы хотите сопоставить с полной командной строкой (как это делает grepping ps), добавьте опцию -f( --full).

В более старых версиях (включая оригинальный проект procps ) -lопция отображала информацию, но ее поведение варьировалось:

  • pgrep -fl сопоставил шаблон с полной командной строкой и показал полную командную строку.
  • pgrep -lодин соответствует только имени исполняемого файла и показывает только имя исполняемого файла.
    Если вы не хотите полного соответствия, вы не можете увидеть полную командную строку :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

Не уверен, какой код * BSD использует, но их справочная страница документирует старое -flповедение.

К сожалению, вы даже не можете использовать -flпереносимо - в недавнем procps-ng, -f( --list-name) всегда печатает только имя исполняемого файла.


4

Linux

Для версии ГНУ pgrepв -i(случай-нечувствительности) не поддерживается, и длинный + нечеткой выход достигается с -af.

$ pgrep -af apache

OUTPUT:
    1748 /usr/sbin/apache2 -k start

Man страница :

   -a, --list-full
       List  the  full  command line as well as the process ID.  (pgrep only.)

   -f, --full
       The pattern is normally only matched against the process name.  
       When -f is set, the full command  line is used.

MacOS

В OSX (и, как вывод, в BSD) -l( длинный вывод ) в сочетании с -f( сопоставление с полными списками аргументов ) будет отображаться полная команда ( -iдобавляет нечувствительность к регистру):

$ pgrep -fil ssh

OUTPUT:
    33770 ssh: abc@192.168.0.123-22 [mux] t

Страница man :

 -l          Long output.  For pgrep, print the
             process name in addition to the
             process ID for each matching
             process.  If used in conjunction
             with -f, print the process ID and
             the full argument list for each
             matching process.  For pkill, dis-
             play the kill command used for
             each process killed.

1

Используйте параметр -v для grep - он возвращает все, НО запрошенный шаблон.

ps -ef | grep <process> | grep -v grep

Это был лучший ответ для меня. Он показывает вам полную команду без усечения, как это происходит сpgrep -u user | xargs ps -f -p
— BringBackCommodore64

0

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

PS поддерживает все виды опций форматирования, поэтому я бы просто сделал псевдоним для того, что вы хотите сохранить при наборе текста. Простой способ исключить процесс grep из вывода - добавить дополнительную трубу, grep -v grepчтобы исключить любые процессы grep.



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.