Ответы:
pgrepПараметры вывода довольно ограничены. Вам почти наверняка потребуется отправить его обратно, psчтобы получить важную информацию. Вы можете автоматизировать это, используя функцию bash в вашем ~/.bashrc.
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
Затем вызовите команду с помощью.
ppgrep <pattern>
psнужен дефис для флагов:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-rкоторая будет выполнять команду, только если она получила список.
ps fp $(pgrep -d, "$@")
Объединить pgrepс psиспользованием xargs!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
Например попробуйте
pgrep -u user | xargs ps -f -p
чтобы получить полный список процессов 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один соответствует только имени исполняемого файла и показывает только имя исполняемого файла. Не уверен, какой код * BSD использует, но их справочная страница документирует старое -flповедение.
К сожалению, вы даже не можете использовать -flпереносимо - в недавнем procps-ng, -f( --list-name) всегда печатает только имя исполняемого файла.
Для версии ГНУ 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
Страница 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.
Используйте параметр -v для grep - он возвращает все, НО запрошенный шаблон.
ps -ef | grep <process> | grep -v grep
pgrep -u user | xargs ps -f -p
Я не думаю, что большинство информации, которую вы можете получить, это имя и идентификатор процесса, используя опцию -l для pgrep.
PS поддерживает все виды опций форматирования, поэтому я бы просто сделал псевдоним для того, что вы хотите сохранить при наборе текста. Простой способ исключить процесс grep из вывода - добавить дополнительную трубу, grep -v grepчтобы исключить любые процессы grep.
Чтобы исключить этот grepпроцесс, вы можете использовать скобки как часть вашего шаблона:
ps -ef | grep '[t]ty'
Вы можете сделать это с помощью psи pgrep:
ps -fp $(pgrep -d, tty)
Это поможет вам, я думаю:
PS auxww
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }В противном случае, если ни один из процессов не соответствует вашему поиску, онpsвыдает целую мегиллу использования.