Назад | Перейти на главную страницу

пс топор | grep java без упаковки в терминале?

Есть ли способ выполнить ps ax | grep java без накрутки на терминал?

Для меня, ps не оборачивается, если я не сделаю:

ps axw

Однако вы можете установить ширину экрана таким образом, чтобы обрезать вывод (но это не отменяет -w):

ps ax --width=80

Вы также можете использовать o (или -o или --format), чтобы включить только интересующие вас столбцы, изменить или исключить заголовки столбцов и установить ширину каждого столбца отдельно *. Видеть man ps и выполните поиск по запросу «определяемый пользователем формат» (несколько раз).

* установка ширины столбца меньшей, чем обычно, может изменить способ отображения содержимого или не повлиять на него. Например, «args: 20» не обрезает вывод (если это не последний столбец), а «user: 5» заставляет имена пользователей длиннее пяти символов отображаться в качестве номера UID.

Я не могу комментировать ответ Денниса Уильямсона (возможно, у меня слишком мало очков для этого); поэтому пишу новый ответ.

Ты можешь сделать

ps ax --width=$COLUMNS

чтобы настроить ширину вывода в соответствии с текущим размером терминала. Если ваша любимая оболочка не поддерживает переменную окружения COLUMNS, вы можете использовать stty:

ps ax --width=$(stty -a | grep 'columns [0-9]*;' | sed 's|.*columns \([0-9]*\).*|\1|')

или более конкретно (с использованием одного awk, но с более сильным предположением о формате вывода stty -a):

ps -axw --width=$(stty -a | awk '/columns/ { printf "%d", $7 }')

Все это требует небольшого набора текста, поэтому вы можете подумать о том, чтобы сделать это псевдонимом или функцией оболочки ... :-) Возможно, вышеизложенное должно быть скорректировано для вашей операционной системы (я не могу сейчас проверить, я не с использованием OS X, но Linux). У меня есть следующий вывод для stty -a:

speed 38400 baud; rows 42; columns 178; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
...

Добавление less -S в конце любой команды развернет вывод команды на терминале Linux.

Пример: 1 (Ваша исходная команда дополнена less -S)

ps ax | grep java | less -S

16338 ?        Sl   725:52 /usr/java/jdk1.8.0_60/bin/java -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_60 -Dexe4j.moduleName=/opt/mqm/mq_mount
23137 ?        Sl   498:18 /usr/java/jdk1.8.0_60/bin/java -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_60 -Dexe4j.moduleName=/opt/mqm/mq_mount
34753 ?        Sl   492:43 /usr/java/jdk1.8.0_60/bin/java -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_60 -Dexe4j.moduleName=/opt/mqm/mq_mount
39519 ?        Sl   486:47 /usr/java/jdk1.8.0_60/bin/java -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_60 -Dexe4j.moduleName=/opt/mqm/mq_mount
42071 ?        Sl   494:36 /usr/java/jdk1.8.0_60/bin/java -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_60 -Dexe4j.moduleName=/opt/mqm/mq_mount

Пример: 2. Более того, следующая команда показывает% потребления ЦП и памяти для каждого потока / идентификатора процесса Java.

ps aux | egrep 'java|USER' | less -S

USER         PID  %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
Kathpalia   14876  0.0  0.0 103328   864 pts/0    S+   09:31   0:00 egrep java|USER
Kathpalia   16338  2.7  9.4 5932240 953984 ?      Sl   Mar22 726:00 /usr/java/jdk1.8.0_60/bin/java -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_60 -Dexe4j.
Kathpalia   23137  2.3  5.3 5875976 542084 ?      Sl   Mar25 498:26 /usr/java/jdk1.8.0_60/bin/java -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_60 -Dexe4j.
Kathpalia   34753  2.3  4.6 5837004 469692 ?      Sl   Mar25 492:51 /usr/java/jdk1.8.0_60/bin/java -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_60 -Dexe4j.
Kathpalia   39519  2.3  4.2 5824768 429004 ?      Sl   Mar25 486:55 /usr/java/jdk1.8.0_60/bin/java -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_60 -Dexe4j.
Kathpalia   42071  2.3  4.0 5825876 408612 ?      Sl   Mar25 494:44 /usr/java/jdk1.8.0_60/bin/java -Dinstall4j.jvmDir=/usr/java/jdk1.8.0_60 -Dexe4j.

Это верно для любого общего процесса:

ps aux | egrep 'MyGenericProcess|USER' | less -S

PS: Для Linux 6.x или выше, grep -E можно использовать вместо egrep