htop来源于top,top是Unix/linux以实时检测和统计过程的属性和状态为基础的强大性能检测工具之一ncurses文字界面可以显示在库上。但是top已经很老了,不支持鼠标点击操作,不支持查看过程中每个子线程的信息(这对我来说很重要,有助于分析代码的效率和优化),不支持color显示易用性差(曾提出改进)top但不接受)。htop官网对htop和top的比较:
2、htop源码下载
网站首页:
源码下载:git clone
GitHub地址:
最新版本是2.0.1,次之2.0.0,再次之1.0.3
3、使用ndk交叉编译
3.1下载ndk,不同的Android版本不同ndk,4.4使用的是android-ndk-r9b-linux-x86_64.tar.bz2();android
5.0的NDK下载地址()
3.2解压android-ndk-r9b-linux-x86_64.tar.bz2.并安装交叉编译工具安装后按正常情况进行linux可以操作交叉编译过程。
$./make-standalone-toolchain.sh
--arch=arm --ndk-dir=/home/klaus/tools/android-ndk-r9b --system=linux-x86_64
--install-dir=/home/klaus/tools/android-ndk-r9b --platform=android-19
这样,将交叉编译工具安装到/home/klaus/tools/android-ndk-r9b
3.3交叉编译ncurses
htop必须有编译ncurses所以编译htop之前,必须先编译ncurses。
下载ncurses:
$./configure
CC=arm-linux-androideabi-gcc-4.6 --prefix=$PWD/system
--host=arm-linux-androideabi --with-shared
CPPFLAGS=-I/home/klaus/tools/android-ndk-r9b/sysroot/usr/include
$
make && make install
note:
a、下图出现错误
修改
b、下图出现错误
执行:
$make
clean
$./configure
CC=arm-linux-androideabi-gcc-4.6 --prefix=$PWD/system
--host=arm-linux-androideabi --with-shared
CPPFLAGS=-I/home/klaus/tools/android-ndk-r9b/sysroot/usr/include
如果有这个错误,重启机器
3.4、交叉编译htop2.0.1版本
klaus@server:~/tools/htop-2.0.1$
./autogen.sh
klaus@server:~/tools/htop-2.0.1$./configure
--prefix=/home/klaus/tools/htop-2.0.1/system --host=arm
--bindir=/home/klaus/tools/htop-2.0.1/system/xbin
--with-sysroot=/home/klaus/tools/android-ndk-r9b/sysroot
CC=arm-linux-androideabi-gcc-4.6 CFLAGS="-I/home/klaus/tools/ncurses-6.0/system/include
-I/home/klaus/tools/ncurses-6.0/system/include/ncurses
-I/home/klaus/tools/android-ndk-r9b/sources/android/support/include"
LDFLAGS=-L/home/klaus/tools/ncurses-6.0/system/lib --disable-unicode
以下错误:
是由于configure文件在检查libncurses库中存在问题,分析configure.ac文件发现如下:
在disable-unicode时,检查libncurses6.so库。此时,我们将查看我们交叉编译后的以下内容ncurses的install目录是否有libncurses6.so文件
显然没有,所以我们需要建立一个软连接;
然后进入htop2.0.1,再次执行configure配置命令,然后编译、安装
如有以下错误:
此时按下图执行:
注释掉HAVE_LINUX_AFFINITY可编译通过
至此,htop编译成功,
3.4.1.将编译好的文件复制到Android上去运行设备
使用adb通过usb进入Android设备的shell
将编译好的ncurses和htop拷贝到system因为目录Android的system目录是只读的,需要remount
我是在windows从linux复制到主机上Android需要借助的设备window,而window目录不区分大小写,需要正确linux压缩上面的内容,然后在Android上解压。
拷贝文件到Android
由于data目录下有system为了不影响目录system,此外,还建立了一个目录cmd_htop,用于解压
拷贝htop应用程序及相关文件到/system
此时可执行htop但是会有错误:
环境变量如下:
执行htop命令,如下
以上红色部分是htop到目前为止,执行效果htop2.0.1移植到Android成功。
3.5、交叉编译htop1.0.3版本
编译和2.0.1的版本差不多,
klaus@server:~/tools/htop-1.0.3$
./configure --prefix=/home/klaus/tools/htop-1.0.3/system --host=arm
--bindir=/home/klaus/tools/htop-1.0.3/system/xbin
--with-sysroot=/home/klaus/tools/android-ndk-r9b/sysroot
CC=arm-linux-androideabi-gcc-4.6 CFLAGS="-I/home/klaus/tools/ncurses-6.0/system/include
-I/home/klaus/tools/ncurses-6.0/system/include/ncurses"
LDFLAGS=-L/home/klaus/tools/ncurses-6.0/system/lib --disable-unicode
如有以下错误:
按以下实施:
增加#include
make编译出现以下错误时:
执行以下操作:
注释掉HAVE_NATIVE_AFFINITY,增加
#define
SYS_ioprio_get __NR_ioprio_get
#define
SYS_ioprio_set __NR_ioprio_set
然后再编译
然后压缩安装目录system为system1.0.3.tar.gz
将system1.0.3.tar.gz拷贝到Android下
4、使用方法
详细应用请man htop查阅。
选择某一进程,按s:用strace追踪进程的系统调用
P、T、M和top下是一样的,按CPU,Time+、Memory使用排序。
下面有F1~F10的功能和对应的字母快捷键。
Shortcut
Key
Function
Key
Description
h
F1
Invoke htop
Help
S
F2
Htop Setup
Menu
/
F3
Search for a
Process
I
F4
Invert Sort
Order
t
F5
Tree View
>
F6
Sort by a
column
[
F7
Nice -
(change priority)
]
F8
Nice + (change
priority)
k
F9
Kill a
Process
q
F10
Quit htop