Відповіді:
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
мегілу використання.