Noah Campbell Asked: 2009-09-03 10:23:03 +0800 CST2009-09-03 10:23:03 +0800 CST 2009-09-03 10:23:03 +0800 CST ps斧头| grep java 在终端中没有包装? 772 有没有办法在ps ax | grep java不包裹在终端上的情况下执行? bash 3 个回答 Voted Best Answer Dennis Williamson 2009-09-03T10:28:56+08:002009-09-03T10:28:56+08:00 对我来说,ps除非我这样做,否则不会换行: ps axw 但是,您可以像这样设置屏幕宽度以截断输出(但不会覆盖-w): ps ax --width=80 您还可以使用o(或-o或--format)选项仅包含您感兴趣的列,更改或消除列标题并单独设置每列的宽度*。查看man ps并搜索“用户定义格式”(多次出现)。 *设置小于正常的列宽可能会改变内容或显示的方式,或者可能没有影响。例如,“args:20”不会截断输出(除非它不是最后一列),“user:5”会导致超过五个字符的用户名显示为 UID 号。 user13723 2009-09-24T00:33:01+08:002009-09-24T00:33:01+08:00 我无法评论丹尼斯·威廉姆森的回答(也许我对此的看法太少了);这就是为什么我要写一个新的答案。 你可以做 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; ... Raman Kathpalia 2018-04-10T06:01:48+08:002018-04-10T06:01:48+08:00 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 PS:对于 Linux 6.x 或更高版本,grep -E可以使用代替egrep
对我来说,
ps
除非我这样做,否则不会换行:但是,您可以像这样设置屏幕宽度以截断输出(但不会覆盖
-w
):您还可以使用
o
(或-o
或--format
)选项仅包含您感兴趣的列,更改或消除列标题并单独设置每列的宽度*。查看man ps
并搜索“用户定义格式”(多次出现)。*
设置小于正常的列宽可能会改变内容或显示的方式,或者可能没有影响。例如,“args:20”不会截断输出(除非它不是最后一列),“user:5”会导致超过五个字符的用户名显示为 UID 号。我无法评论丹尼斯·威廉姆森的回答(也许我对此的看法太少了);这就是为什么我要写一个新的答案。
你可以做
根据当前终端大小调整输出宽度。如果你喜欢的 shell 不支持 COLUMNS 环境变量,你可以使用 stty:
或更具体地说(使用单个 awk 但对 stty -a 输出格式做出更强的假设):
所有这些都需要大量输入,因此您可能需要考虑将上面的内容设为别名或 shell 函数... :-) 以上内容可能需要针对您的操作系统进行调整(我现在无法测试,我不是使用 OS X 但 Linux)。我对 stty -a 有以下输出:
less -S
在任何命令的末尾追加将在 Linux 终端上解开命令输出。示例:1(您的原始命令附加了
less -S
)示例: 2。更好的是,下一个命令显示每个 Java 线程/进程 ID 的 CPU 和内存消耗百分比。
对于任何通用过程都是如此:
PS:对于 Linux 6.x 或更高版本,
grep -E
可以使用代替egrep