Як отримати pgrep для відображення повної інформації про процес


26

Чи є якийсь спосіб pgrepнадати мені всю інформацію про кожен процес, що psвідбувається? Я знаю, що я можу psпройти, grepале це дуже багато набору тексту, і це також дає мені сам grepпроцес, який я не хочу.

Відповіді:


22

pgrepВаріанти вихідних даних досить обмежені. Вам майже напевно потрібно буде надіслати його назад, psщоб отримати важливу інформацію. Ви можете автоматизувати це за допомогою функції bash у своєму ~/.bashrc.

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

Потім зателефонуйте команді за допомогою.

ppgrep <pattern>

2
Спасибі! Я змінив це: function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } Інакше, якщо жоден процес не відповідає вашому пошуку, він скидає цілу psмегілу використання.
JoelFan

На ОС X psпотрібна дефіс для прапорів:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
Ерік Номіч

1
Якщо ви хочете уникнути сторінки використання ps, у GNU xargs є опція, -rяка виконує команду лише у тому випадку, якщо вона отримала список.
Дуг

1
Більш лаконічний спосібps fp $(pgrep -d, "$@")
Ігор Мікушкін

14

Поєднуйтесь pgrepіз psвикористанням xargs!

pgrep <your pgrep-criteria> | xargs ps <your ps options> -p

Наприклад, спробуйте

pgrep -u user | xargs ps -f -p

щоб отримати повний список процесів user.

Приємно, що ви зберігаєте перший рядок із назвами стовпців. grepзавжди скидає назви стовпців.


відмінно! це вирішує дивну проблему із сценарієм запуску сервера arcgis для xfvb
prusswan

Це має бути прийнятою відповіддю, оскільки він використовує Unix труби належним чином, беручи список PID з одного інструменту і подаючи назад в інший (якщо це здається хакером, це не так - цю техніку можна використовувати в ЛОТІ інструментів UNIX , як-от інструменти грепування електронної пошти. Функція Bash ppgrep () є непотрібною залежністю, і уникає протистояння можливостям навчання, представленому тут.)
Scott Prive

10

Нижче наведено лише PID + повний командний рядок. Для "всієї інформації ps" дивіться інші відповіді ...

Більшість Linux використовує procps -ng . З 3.3.4 (випущений у 2012 році), pgrep -a( --list-full) відображає повний командний рядок.
Примітка: за замовчуванням pgrep відповідає лише шаблону, який ви надаєте проти імені виконавця. Якщо ви хочете збігатися з повним командним рядком (як це робиться ps), додайте параметр -f( --full).

У старих версіях (включаючи оригінальний проект propps ) -lпараметр показував інформацію, але поведінка відрізняється:

  • pgrep -fl співставив шаблон з повним командним рядком і показав повний командний рядок.
  • pgrep -lпоодинці відповідали лише виконуваному імені та показували лише ім'я виконавця.
    Якщо ви не хочете повного збігу, ви не побачили повний командний рядок :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

Не впевнений, який код * BSD використовує, але їх сторінка документує стару -flповедінку.

На жаль, ви навіть не можете користуватися -flпортативно - в останніх procps-ng, -f( --list-name) завжди друкує лише ім'я виконавця.


4

Linux

Для версії 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.

MacOS

На 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.

1

Використовуйте опцію -v для перекопування - вона повертає все, АЛЕ запитуваний шаблон.

ps -ef | grep <process> | grep -v grep

Це була найкраща відповідь для мене. Він показує вам повну команду, не врізавшись, як це відбуваєтьсяpgrep -u user | xargs ps -f -p
BringBackCommodore64

0

Я не думаю, що існує, найбільше інформації, яку ви можете отримати, - це ім’я та ідентифікатор процесу, використовуючи опцію -l для pgrep.

ps підтримує всілякі параметри форматування, тому я б просто створив псевдонім для того, що ви хочете зберегти набравши. Простий спосіб виключити grep-процес з виводу, щоб ми включили додаткову трубу, grep -v grepщоб виключити будь-які grep-процеси.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.