ps ax | grep java 在终端中没有换行吗?

ps ax | grep java 在终端中没有换行吗?

有没有办法可以ps ax | grep java在终端上执行而不换行?

答案1

对我来说,ps除非我执行以下操作,否则不会换行:

ps axw

但是,您可以像这样设置屏幕宽度来截断输出(但不会覆盖-w):

ps ax --width=80

您还可以使用o(或-o--format)选项仅包含您感兴趣的列,更改或删除列标题并单独设置每列的宽度*。查看man ps并搜索“用户定义格式”(多次出现)。

*将列宽设置为小于正常值可能会改变内容的显示方式,也可能不产生影响。例如,“args:20”不会截断输出(除非它不是最后一列),而“user:5”会导致长度超过五个字符的用户名显示为 UID 号。

答案2

我无法对丹尼斯·威廉姆森的回答发表评论(也许我的分数太少了);这就是我写新答案的原因。

你可以做

ps ax --width=$COLUMNS

根据当前终端大小调整输出宽度。如果您喜欢的 shell 不支持 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 }')

所有这些都需要输入相当多的内容,因此您可能需要考虑将上述内容设为别名或 shell 函数... :-) 上述内容可能需要根据您的操作系统进行调整(我现在无法测试,因为我使用的不是 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;
...

答案3

追加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 线程/进程 ID 的 CPU 和内存消耗百分比。

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

附言:对于 Linux 6.x 或更高版本,grep -E可以代替egrep

相关内容