Есть ли способ, чтобы pgrep
дать мне всю информацию о каждом процессе, который ps
делает? Я знаю , что могу трубу ps
через , grep
но это много печатать , и это также дает мне grep
сам процесс , который я не хочу.
27
pgrep
Параметры вывода довольно ограничены. Вам почти наверняка потребуется отправить его обратно, ps
чтобы получить важную информацию. Вы можете автоматизировать это, используя функцию bash в вашем ~/.bashrc
.
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
Затем вызовите команду с помощью.
ppgrep <pattern>
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
В противном случае, если ни один из процессов не соответствует вашему поиску, онps
выдает целую мегиллу использования.ps
нужен дефис для флагов:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
которая будет выполнять команду, только если она получила список.ps fp $(pgrep -d, "$@")
Объединить
pgrep
сps
использованиемxargs
!Например попробуйте
чтобы получить полный список процессов
user
.Приятно, что вы сохраняете первую строку с именами столбцов.
grep
всегда отбрасывает имена столбцов.источник
-u
= только сопоставлять процессы, чей эффективный идентификатор пользователя указан в списке (см.pgrep
Ссылку linux.die.net/man/1/pgrep )-f
= полный список форматов,-p
= выбирать по PID (см.ps
Ссылку - man7.org/linux/man -pages / man1 / ps.1.html )Следующее дает только 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
Для версии ГНУ
pgrep
в-i
(случай-нечувствительности) не поддерживается, и длинный + нечеткой выход достигается с-af
.Man страница :
MacOS
В OSX (и, как вывод, в BSD)
-l
( длинный вывод ) в сочетании с-f
( сопоставление с полными списками аргументов ) будет отображаться полная команда (-i
добавляет нечувствительность к регистру):Страница man :
источник
Используйте параметр -v для grep - он возвращает все, НО запрошенный шаблон.
источник
pgrep -u user | xargs ps -f -p
Я не думаю, что большинство информации, которую вы можете получить, это имя и идентификатор процесса, используя опцию -l для pgrep.
PS поддерживает все виды опций форматирования, поэтому я бы просто сделал псевдоним для того, что вы хотите сохранить при наборе текста. Простой способ исключить процесс grep из вывода - добавить дополнительную трубу,
grep -v grep
чтобы исключить любые процессы grep.источник
Чтобы исключить этот
grep
процесс, вы можете использовать скобки как часть вашего шаблона:Вы можете сделать это с помощью
ps
иpgrep
:источник
Это поможет вам, я думаю:
PS auxww
источник