答案1
您的输出显示top
正在打印一些终端无法识别的转义序列。您看到空白后跟[
更多垃圾字符的位是在大多数终端上工作的转义序列;这些序列的第一个字符是转义字符,您的终端将其打印为空白。例如,␛[7m
在标题行的开头开始反显、␛[0m
停止反显等。
我不确定 STAT 和 VSZ 列究竟发生了什么,但似乎顶部也在那里打印了一些颜色变化序列(这就是来自的地方m
),并且它们已被部分覆盖(顶部可能正在打印一个␈
字符,它确实使光标向左移动,以便下一个字符覆盖那里的字符)。
对于许多程序,TERM
正确设置环境变量就足够了:它应该指示不支持任何转义序列的终端类型。确保您没有对TERM
某处的值进行硬编码的脚本。尝试TERM=dumb
。如果您使用 BusyBox,我认为它的top
硬编码转义序列适用于大多数终端,所以您运气不好。您可以通过删除转义序列的过滤器运行它。未经测试,但应该与 BusyBox 一起使用。
#!/bin/sh
script=$(printf 's/\033\\[[0-9;]*[A-Za-z]//g')
sed -e "$script" "$@"
(从这更完整的 Perl 脚本)
答案2
从http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ps.html:
VSZ=“(虚拟)内存中进程的大小,以 1024 字节为单位,以十进制整数表示。”