Відповіді:
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завжди скидає назви стовпців.
Нижче наведено лише PID + повний командний рядок. Для "всієї інформації ps" дивіться інші відповіді ...
Більшість Linux використовує procps -ng . З 3.3.4 (випущений у 2012 році), pgrep -a( --list-full) відображає повний командний рядок.
Примітка: за замовчуванням pgrep відповідає лише шаблону, який ви надаєте проти імені виконавця. Якщо ви хочете збігатися з повним командним рядком (як це робиться ps), додайте параметр -f( --full).
У старих версіях (включаючи оригінальний проект propps ) -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 для перекопування - вона повертає все, АЛЕ запитуваний шаблон.
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мегілу використання.