Есть ли способ получить 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
только соответствует только имени исполняемого файла и показывает только имя исполняемого файла.Не уверен, какой код * BSD использует, но их страница руководства документы старые -fl
поведение.
К сожалению, вы даже не можете использовать -fl
переносимо - в недавнем procps-ng, -f
(--list-name
) всегда выводит только имя исполняемого файла.
Для версии 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.
В 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