Ответы:
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
выдает целую мегиллу использования.