Назад | Перейти на главную страницу

Как заставить pgrep отображать полную информацию о процессе

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

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

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

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

ppgrep <pattern>

Объединить pgrep с участием ps с помощью xargs!

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

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

pgrep -u user | xargs ps -f -p

чтобы получить полный список процессов user. Вариант -u user пределы pgrep пользователю, указанному (в виде номера или имени), а ps параметры -f -p запросить полный формат списка для выбранного PID.

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

Следующее дает вам только полную командную строку 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) всегда выводит только имя исполняемого файла.

Linux

Для версии GNU pgrep в -i (нечувствительность к регистру) не поддерживается, а длинный + нечеткий вывод достигается с помощью -af.

$ pgrep -af apache

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

Страница руководства:

   -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

В страница руководства:

 -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.

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

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

Я знаю, что это старая тема. Тем не менее, это было полезно для меня, и я хотел бы поделиться тем, что я сделал, что сработало. Это довольно просто для новичка (вроде меня) и может помочь другим:

[root@2a8ad900f55e tmp]# pgrep -f '(^|/)db2fmcd'|xargs ps |awk '{print $5}'
COMMAND
/opt/ibm/db2/V11.5/bin/db2fmcd

Обратите внимание, что столбец «CMD» также был показан, но вопрос этого потока заключался в том, чтобы показать команду, а не только команду. В любом случае, я пытаюсь удалить этот столбец и тоже обновлю свой пост с помощью этой команды.

Примечание. Аргументы «--no-headers и -o command» выделяют вывод только для команды. И я мог удалить печать awk.


[root@2a8ad900f55e tmp]# pgrep -f '(^|/)db2fmcd'|xargs ps -o command --no-headers
/opt/ibm/db2/V11.5/bin/db2fmcd
[root@2a8ad900f55e tmp]#

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

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

Чтобы устранить grep процесса, вы можете использовать скобки как часть вашего шаблона:

ps -ef | grep '[t]ty'

Вы можете сделать это с помощью ps и pgrep:

ps -fp $(pgrep -d, tty)

Думаю, это поможет вам:

ps auxww