android下使用htop和lsof

2021-07-23 11:45:32 字數 2770 閱讀 4732

在編譯並使用基於android的htop-2.0.2過程中(引用一),發現檢視程序使用檔案控制代碼(快捷鍵'l',實際呼叫命令lsof)資訊一直為空白,經研究發現原來android的lsof其實是包含在toolbox中的子功能,其功能很單一不支援命令列引數,現單獨編譯源**生成程式供htop呼叫。

一、編譯方式

1、在android框架中編譯

在github上有專案(引用二),是基於4.86在lollipop下的工程,不做過多解釋

2、使用ndk(r10e、api21)進行編譯

(2) 配置編譯指令碼

export path=/home/test/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$path

sysroot=/home/test/android-ndk-r10e/platforms/android-21/arch-arm/

export lsof_cc="arm-linux-androideabi-gcc --sysroot=$sysroot"

export lsof_host=arm-linux-androideabi

export lsof_cfgf='-o -dhas_strftime -dhasnorpc_h -dglibcv'

./configure -n linux

make

更多配置引數可查閱00xconfig檔案中說明。

(3) 修改編譯錯誤

a) lsof.h:229:12: error: conflicting types for '__errno'

找到lsof.h的229行,遮蔽"extern int errno;"

b) misc.o:misc.c:function safestrprt: error: undefined reference to 'mblen'

找到machine.h的458行,遮蔽"#define haswidechar     1"

(4) 修改執行錯誤

執行時錯誤"only position independent executables (pie) are supported."

將編譯指令碼lsof_cc修改為"arm-linux-androideabi-gcc --sysroot=$sysroot -fpie -pie"

(5) 生成靜態鏈結版本

lsof的配置只支援動態鏈結方式,但可以在按非pie方式(跳過上面第4點)編譯成功的前提下,執行如下的命令可以生成靜態鏈結版本(引用四)。

$lsof_cc -o lsof -static dfile.o dmnt.o dnode.o dproc.o dsock.o dstore.o arg.o main.o misc.o node.o print.o proc.o store.o usage.o util.o -l./lib -llsof

二、附htop-2.0.2和ncurses-6.0的編譯指令碼

1、htop

export path=/home/test/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$path

sysroot=/home/test/android-ndk-r10e/platforms/android-21/arch-arm/

./configure \

cc=arm-linux-androideabi-gcc \

--prefix=$pwd/system \

--bindir=$pwd/system/bin \

cflags=" -i$pwd/../ncurses-6.0/system/include -i$pwd/../ncurses-6.0/system/include/ncurses --sysroot=$sysroot -fpie -pie" \

ldflags=" -l$pwd/../ncurses-6.0/system/lib" \

--host=arm-linux-androideabi \

--disable-unicode

make

make install

2、ncurses

export path=/home/test/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$path

sysroot=/home/test/android-ndk-r10e/platforms/android-21/arch-arm/

./configure \

cc=arm-linux-androideabi-gcc \

--prefix=$pwd/system \

cflags=" -i../ncurses -i../progs --sysroot=$sysroot" \

--host=arm-linux-androideabi \

--with-shared \

make

make install

三、擴充套件話題

在使用ndk進行交叉編譯(非ndk-build方式)的時候需要寫編譯指令碼,這個有一定的重複工作(如ndk路徑、sysroot引數、編譯器配置等等)。發現有人已經把這個重複工作整合成編譯工具(引用五),只需要在工程目錄下執行工具指令碼即可完成前期配置工作。

四、相關引用

1、2、

3、4、

Linux Centos下安裝htop使用htop

top和top都是管理程序的,但是htop是top的加強版,增加了好多功能。1.安裝htop wget tar zxf htop configure make make install 其中需要說明的一點是,htop需要ncurses,所以在安裝之前先安裝ncurses,ncurses的安裝方法與h...

Linux下htop的使用

第1行 第4行 顯示cpu當前的執行負載,有幾核就有幾行,我的是4核 mem 顯示記憶體的使用情況,3887m大概是3.8g,此時的mem不包含buffers和cached的記憶體,所以和free m會不同 swp 顯示交換空間的使用情況,交換空間是當記憶體不夠和其中有一些長期不用的資料時,ubun...

HTOP使用方法

可以使用命令 apt get install htop 來安裝 htop,安裝完成之後,鍵入 htop 命令,開啟htop。互動命令用上檔鍵shift。常用命令,shift m 按照記憶體大小排序。shift h 收縮執行緒。q 退出 下面是 f1 f10 的功能和對應的字母快捷鍵。命令列選項 co...