生活随笔
收集整理的這篇文章主要介紹了
Android执行shell命令
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?Android執(zhí)行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();?}?二、用途 執(zhí)行Linux下的top、ps等命令,這些命令你也通過(guò)adb可以執(zhí)行查看效果。 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.?//?最多顯示多少個(gè)進(jìn)程???-n?num??Updates?to?show?before?exiting.?//?刷新次數(shù)???-d?num??Seconds?to?wait?between?updates.?//?刷新間隔時(shí)間(默認(rèn)5秒)???-s?col??Column?to?sort?by?<cpu,vss,rss,thr>?//?按哪列排序???-t??????Show?threads?instead?of?processes.?//?顯示線(xiàn)程信息而不是進(jìn)程???-h??????Display?this?help?screen.?//?顯示幫助文檔?$?top?-n?1?top?-n?1? 就不把執(zhí)行效果放上來(lái)了,總之結(jié)果表述如下:
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?//?進(jìn)程屬性?xx??xx%?x???xx??xx??xx??xx??xx???xx??CPU占用率:?User????用戶(hù)進(jìn)程?System??系統(tǒng)進(jìn)程?IOW?IO等待時(shí)間?IRQ?硬中斷時(shí)間??CPU使用情況(指一個(gè)最小時(shí)間片內(nèi)所占時(shí)間,單位jiffies?;蛘咧杆歼M(jìn)程數(shù)):?User????處于用戶(hù)態(tài)的運(yùn)行時(shí)間,不包含優(yōu)先值為負(fù)進(jìn)程?Nice????優(yōu)先值為負(fù)的進(jìn)程所占用的CPU時(shí)間?Sys?處于核心態(tài)的運(yùn)行時(shí)間?Idle????除IO等待時(shí)間以外的其它等待時(shí)間?IOW?IO等待時(shí)間?IRQ?硬中斷時(shí)間?SIRQ????軟中斷時(shí)間??進(jìn)程屬性:?PID?進(jìn)程在系統(tǒng)中的ID?CPU%????當(dāng)前瞬時(shí)所以使用CPU占用率?S???進(jìn)程的狀態(tài),其中S表示休眠,R表示正在運(yùn)行,Z表示僵死狀態(tài),N表示該進(jìn)程優(yōu)先值是負(fù)數(shù)。?#THR????程序當(dāng)前所用的線(xiàn)程數(shù)?VSS?Virtual?Set?Size?虛擬耗用內(nèi)存(包含共享庫(kù)占用的內(nèi)存)?RSS?Resident?Set?Size?實(shí)際使用物理內(nèi)存(包含共享庫(kù)占用的內(nèi)存)?PCY?OOXX,不知道什么東東?UID?運(yùn)行當(dāng)前進(jìn)程的用戶(hù)id?Name????程序名稱(chēng)android.process.media??//?ps:內(nèi)存占用大小有如下規(guī)律:VSS?>=?RSS?>=?PSS?>=?USS?//?PSS??Proportional?Set?Size?實(shí)際使用的物理內(nèi)存(比例分配共享庫(kù)占用的內(nèi)存)?//?USS??Unique?Set?Size?進(jìn)程獨(dú)自占用的物理內(nèi)存(不包含共享庫(kù)占用的內(nèi)存)?? ? ? ???在附件Android系統(tǒng)->android top.txt文件內(nèi),自個(gè)總結(jié)的。
2)執(zhí)行代碼
?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;?}?三、后記 這次相關(guān)的僅有的那個(gè)工程好像不能放上來(lái)了==。 好吧,把我當(dāng)時(shí)整理的一點(diǎn)點(diǎn)相關(guān)資料放附件了:包含《Android系統(tǒng)》文件夾和《深入研究java.lang.ProcessBuilder類(lèi).doc》。 文件夾內(nèi)容如下:
?
ps:現(xiàn)在有個(gè)可以看的小工程了,請(qǐng)移至《Android VNC Server New》! 附件:http://down.51cto.com/data/2359794
? ? ?本文轉(zhuǎn)自winorlose2000 51CTO博客,原文鏈接:http://blog.51cto.com/vaero/778139,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的Android执行shell命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。