Android執行shell命令詳解_Android

來源:互聯網
上載者:User
一、方法
複製代碼 代碼如下:

/** 
* 執行一個shell命令,並返回字串值 

* @param cmd 
* 命令名稱&參數組成的數組(例如:{"/system/bin/cat", "/proc/version"}) 
* @param workdirectory 
* 命令執行路徑(例如:"system/bin/") 
* @return 執行結果組成的字串 
* @throws IOException 
*/ 
public static synchronized String run(String[] cmd, String workdirectory) 
throws IOException { 
StringBuffer result = new StringBuffer(); 
try { 
// 建立作業系統進程(也可以由Runtime.exec()啟動) 
// Runtime runtime = Runtime.getRuntime(); 
// Process proc = runtime.exec(cmd); 
// InputStream inputstream = proc.getInputStream(); 
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)執行代碼
複製代碼 代碼如下:

// top命令 
public static final String[] TOP = { "/system/bin/top", "-n", "1" }; 
// 現在執行top -n 1,我們只需要第二行(用第二行求得CPU佔用率,精確資料) 
// 第一行: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使用方式 
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 
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; 

// 擷取指定應用的top命令擷取的資訊 
// PID CPU% S #THR VSS RSS PCY UID Name // 進程屬性 
// 如果當前應用不在運行則返回null 
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 
BufferedReader buf = new BufferedReader(new InputStreamReader(is)); 
do { 
line = buf.readLine(); 
// 讀取到相應pkgName跳出迴圈(或者未找到) 
if (null == line || line.endsWith(pkgName)) { 
break; 

} while (true); 
if (is != null) { 
buf.close(); 
is.close(); 

} catch (IOException e) { 
e.printStackTrace(); 

return line; 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.