生活随笔
收集整理的這篇文章主要介紹了
Android执行shell命令
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?Android執行shell命令
一、方法
??????????public?static?synchronized?String?run(String[]?cmd,?String?workdirectory)?????????throws?IOException?{?????StringBuffer?result?=?new?StringBuffer();?????try?{?????????????????????????????????????????????ProcessBuilder?builder?=?new?ProcessBuilder(cmd);??????????InputStream?in?=?null;??????????????????if?(workdirectory?!=?null)?{??????????????????????????builder.directory(new?File(workdirectory));??????????????????????????builder.redirectErrorStream(true);??????????????????????????Process?process?=?builder.start();???????????????????????????in?=?process.getInputStream();?????????????byte[]?re?=?new?byte[1024];?????????????while?(in.read(re)?!=?-1)?{?????????????????result?=?result.append(new?String(re));?????????????}?????????}??????????????????if?(in?!=?null)?{?????????????in.close();?????????}?????}?catch?(Exception?ex)?{?????????ex.printStackTrace();?????}?????return?result.toString();?}?二、用途 執行Linux下的top、ps等命令,這些命令你也通過adb可以執行查看效果。 1)top命令如下:
adb?shell?$?top?-h?top?-h?Usage:?top?[-m?max_procs]?[-n?iterations]?[-d?delay]?[-s?sort_column]?[-t]?[-h]???-m?num??Maximum?number?of?processes?to?display.?//?最多顯示多少個進程???-n?num??Updates?to?show?before?exiting.?//?刷新次數???-d?num??Seconds?to?wait?between?updates.?//?刷新間隔時間(默認5秒)???-s?col??Column?to?sort?by?<cpu,vss,rss,thr>?//?按哪列排序???-t??????Show?threads?instead?of?processes.?//?顯示線程信息而不是進程???-h??????Display?this?help?screen.?//?顯示幫助文檔?$?top?-n?1?top?-n?1? 就不把執行效果放上來了,總之結果表述如下:
User?35%,?System?13%,?IOW?0%,?IRQ?0%?//?CPU占用率?User?109?+?Nice?0?+?Sys?40?+?Idle?156?+?IOW?0?+?IRQ?0?+?SIRQ?1?=?306?//?CPU使用情況??PID?CPU%?S?#THR?VSS?RSS?PCY?UID?Name?//?進程屬性?xx??xx%?x???xx??xx??xx??xx??xx???xx??CPU占用率:?User????用戶進程?System??系統進程?IOW?IO等待時間?IRQ?硬中斷時間??CPU使用情況(指一個最小時間片內所占時間,單位jiffies。或者指所占進程數):?User????處于用戶態的運行時間,不包含優先值為負進程?Nice????優先值為負的進程所占用的CPU時間?Sys?處于核心態的運行時間?Idle????除IO等待時間以外的其它等待時間?IOW?IO等待時間?IRQ?硬中斷時間?SIRQ????軟中斷時間??進程屬性:?PID?進程在系統中的ID?CPU%????當前瞬時所以使用CPU占用率?S???進程的狀態,其中S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值是負數。?#THR????程序當前所用的線程數?VSS?Virtual?Set?Size?虛擬耗用內存(包含共享庫占用的內存)?RSS?Resident?Set?Size?實際使用物理內存(包含共享庫占用的內存)?PCY?OOXX,不知道什么東東?UID?運行當前進程的用戶id?Name????程序名稱android.process.media??//?ps:內存占用大小有如下規律:VSS?>=?RSS?>=?PSS?>=?USS?//?PSS??Proportional?Set?Size?實際使用的物理內存(比例分配共享庫占用的內存)?//?USS??Unique?Set?Size?進程獨自占用的物理內存(不包含共享庫占用的內存)?? ? ? ???在附件Android系統->android top.txt文件內,自個總結的。
2)執行代碼
?public?static?final?String[]?TOP?=?{?"/system/bin/top",?"-n",?"1"?};??????public?static?synchronized?String?run(String[]?cmd)?{?????String?line?=?"";?????InputStream?is?=?null;?????try?{?????????Runtime?runtime?=?Runtime.getRuntime();?????????Process?proc?=?runtime.exec(cmd);?????????is?=?proc.getInputStream();???????????????????BufferedReader?buf?=?new?BufferedReader(new?InputStreamReader(is));?????????do?{?????????????line?=?buf.readLine();??????????????????????????if?(line.startsWith("User"))?{??????????????????????????????????line?=?buf.readLine();?????????????????break;?????????????}?????????}?while?(true);??????????if?(is?!=?null)?{?????????????buf.close();?????????????is.close();?????????}?????}?catch?(IOException?e)?{?????????e.printStackTrace();?????}?????return?line;?}?????public?static?synchronized?String?run(String[]?cmd,?String?pkgName)?{?????String?line?=?null;?????InputStream?is?=?null;?????try?{?????????Runtime?runtime?=?Runtime.getRuntime();?????????Process?proc?=?runtime.exec(cmd);?????????is?=?proc.getInputStream();???????????????????BufferedReader?buf?=?new?BufferedReader(new?InputStreamReader(is));?????????do?{?????????????line?=?buf.readLine();??????????????????????????if?(null?==?line?||?line.endsWith(pkgName))?{?????????????????break;?????????????}?????????}?while?(true);??????????if?(is?!=?null)?{?????????????buf.close();?????????????is.close();?????????}?????}?catch?(IOException?e)?{?????????e.printStackTrace();?????}?????return?line;?}?三、后記 這次相關的僅有的那個工程好像不能放上來了==。 好吧,把我當時整理的一點點相關資料放附件了:包含《Android系統》文件夾和《深入研究java.lang.ProcessBuilder類.doc》。 文件夾內容如下:
?
ps:現在有個可以看的小工程了,請移至《Android VNC Server New》! 附件:http://down.51cto.com/data/2359794
? ? ?本文轉自winorlose2000 51CTO博客,原文鏈接:http://blog.51cto.com/vaero/778139,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的Android执行shell命令的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。