答え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バイト)、10進整数で表示されます。