成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分享 Process 執(zhí)行命令行封裝類

移動(dòng)開(kāi)發(fā) Android
進(jìn)行多次測(cè)試后發(fā)現(xiàn)是因?yàn)闆](méi)有正常退出進(jìn)程,以及完全讀取掉流數(shù)據(jù),和關(guān)閉流導(dǎo)致的問(wèn)題。 在多次優(yōu)化后,建立如下封裝類:

進(jìn)行多次測(cè)試后發(fā)現(xiàn)是因?yàn)闆](méi)有正常退出進(jìn)程,以及完全讀取掉流數(shù)據(jù),和關(guān)閉流導(dǎo)致的問(wèn)題。

在多次優(yōu)化后,建立如下封裝類:

ProcessModel.java

  1. import java.io.BufferedReader; 
  2. import java.io.IOException; 
  3. import java.io.InputStream; 
  4. import java.io.InputStreamReader; 
  5. import java.io.OutputStream; 
  6.    
  7. /** 
  8.  * Create By Qiujuer 
  9.  * 2014-07-26 
  10.  * <p/> 
  11.  * 執(zhí)行命令行語(yǔ)句靜態(tài)方法封裝 
  12.  */ 
  13. public class ProcessModel { 
  14.     //換行符 
  15.     private static final String BREAK_LINE; 
  16.     //執(zhí)行退出命令 
  17.     private static final byte[] COMMAND_EXIT; 
  18.     //錯(cuò)誤緩沖 
  19.     private static byte[] BUFFER; 
  20.    
  21.     /** 
  22.      * 靜態(tài)變量初始化 
  23.      */ 
  24.     static { 
  25.         BREAK_LINE = "\n"
  26.         COMMAND_EXIT = "\nexit\n".getBytes(); 
  27.         BUFFER = new byte[32]; 
  28.     } 
  29.    
  30.    
  31.     /** 
  32.      * 執(zhí)行命令 
  33.      * 
  34.      * @param params 命令參數(shù) 
  35.      *               <pre> eg: "/system/bin/ping", "-c", "4", "-s", "100","www.qiujuer.net"</pre> 
  36.      * @return 執(zhí)行結(jié)果 
  37.      */ 
  38.     public static String execute(String... params) { 
  39.         Process process = null
  40.         StringBuilder sbReader = null
  41.    
  42.         BufferedReader bReader = null
  43.         InputStreamReader isReader = null
  44.    
  45.         InputStream in = null
  46.         InputStream err = null
  47.         OutputStream out = null
  48.    
  49.         try { 
  50.             process = new ProcessBuilder() 
  51.                     .command(params) 
  52.                     .start(); 
  53.             out = process.getOutputStream(); 
  54.             in = process.getInputStream(); 
  55.             err = process.getErrorStream(); 
  56.    
  57.             out.write(COMMAND_EXIT); 
  58.             out.flush(); 
  59.    
  60.             process.waitFor(); 
  61.    
  62.             isReader = new InputStreamReader(in); 
  63.             bReader = new BufferedReader(isReader); 
  64.    
  65.             String s; 
  66.             if ((s = bReader.readLine()) != null) { 
  67.                 sbReader = new StringBuilder(); 
  68.                 sbReader.append(s); 
  69.                 sbReader.append(BREAK_LINE); 
  70.                 while ((s = bReader.readLine()) != null) { 
  71.                     sbReader.append(s); 
  72.                     sbReader.append(BREAK_LINE); 
  73.                 } 
  74.             } 
  75.    
  76.             while ((err.read(BUFFER)) > 0) { 
  77.             } 
  78.         } catch (IOException e) { 
  79.             e.printStackTrace(); 
  80.         } catch (Exception e) { 
  81.             e.printStackTrace(); 
  82.         } finally { 
  83.             closeAllStream(out, err, in, isReader, bReader); 
  84.    
  85.             if (process != null) { 
  86.                 processDestroy(process); 
  87.                 process = null
  88.             } 
  89.         } 
  90.    
  91.         if (sbReader == null) 
  92.             return null; 
  93.         else 
  94.             return sbReader.toString(); 
  95.     } 
  96.    
  97.     /** 
  98.      * 關(guān)閉所有流 
  99.      * 
  100.      * @param out      輸出流 
  101.      * @param err      錯(cuò)誤流 
  102.      * @param in       輸入流 
  103.      * @param isReader 輸入流封裝 
  104.      * @param bReader  輸入流封裝 
  105.      */ 
  106.     private static void closeAllStream(OutputStream out, InputStream err, InputStream in, InputStreamReader isReader, BufferedReader bReader) { 
  107.         if (out != null) 
  108.             try { 
  109.                 out.close(); 
  110.             } catch (IOException e) { 
  111.                 e.printStackTrace(); 
  112.             } 
  113.         if (err != null) 
  114.             try { 
  115.                 err.close(); 
  116.             } catch (IOException e) { 
  117.                 e.printStackTrace(); 
  118.             } 
  119.         if (in != null) 
  120.             try { 
  121.                 in.close(); 
  122.             } catch (IOException e) { 
  123.                 e.printStackTrace(); 
  124.             } 
  125.         if (isReader != null) 
  126.             try { 
  127.                 isReader.close(); 
  128.             } catch (IOException e) { 
  129.                 e.printStackTrace(); 
  130.             } 
  131.         if (bReader != null) 
  132.             try { 
  133.                 bReader.close(); 
  134.             } catch (IOException e) { 
  135.                 e.printStackTrace(); 
  136.             } 
  137.     } 
  138.    
  139.    
  140.     /** 
  141.      * 通過(guò)Android底層實(shí)現(xiàn)進(jìn)程關(guān)閉 
  142.      * 
  143.      * @param process 進(jìn)程 
  144.      */ 
  145.     private static void killProcess(Process process) { 
  146.         int pid = getProcessId(process); 
  147.         if (pid != 0) { 
  148.             try { 
  149.                 //android kill process 
  150.                 android.os.Process.killProcess(pid); 
  151.             } catch (Exception e) { 
  152.                 try { 
  153.                     process.destroy(); 
  154.                 } catch (Exception ex) { 
  155.                 } 
  156.             } 
  157.         } 
  158.     } 
  159.    
  160.     /** 
  161.      * 獲取進(jìn)程的ID 
  162.      * 
  163.      * @param process 進(jìn)程 
  164.      * @return 
  165.      */ 
  166.     private static int getProcessId(Process process) { 
  167.         String str = process.toString(); 
  168.         try { 
  169.             int i = str.indexOf("=") + 1; 
  170.             int j = str.indexOf("]"); 
  171.             strstr = str.substring(i, j); 
  172.             return Integer.parseInt(str); 
  173.         } catch (Exception e) { 
  174.             return 0; 
  175.         } 
  176.     } 
  177.    
  178.     /** 
  179.      * 銷毀進(jìn)程 
  180.      * 
  181.      * @param process 進(jìn)程 
  182.      */ 
  183.     private static void processDestroy(Process process) { 
  184.         if (process != null) { 
  185.             try { 
  186.                 //判斷是否正常退出 
  187.                 if (process.exitValue() != 0) { 
  188.                     killProcess(process); 
  189.                 } 
  190.             } catch (IllegalThreadStateException e) { 
  191.                 killProcess(process); 
  192.             } 
  193.         } 
  194.     } 

在進(jìn)行批量壓力測(cè)試到達(dá)125643個(gè)線程的時(shí)候都沒(méi)有出現(xiàn)此問(wèn)題;特此分享給大家

本文鏈接:http://blog.csdn.net/qiujuer/article/details/38142273

責(zé)任編輯:chenqingxiang 來(lái)源: oschina
相關(guān)推薦

2021-05-31 12:05:46

Shell命令Linux

2011-07-21 13:10:59

2010-02-05 14:59:31

C++命令行模式編譯設(shè)

2020-12-10 16:16:08

工具代碼開(kāi)發(fā)

2020-12-11 06:44:16

命令行工具開(kāi)發(fā)

2020-05-07 19:46:18

LinuxMySQLMariaDB

2020-03-31 08:30:00

ffsendFireFox SenLinux

2010-12-02 14:29:07

nmap

2015-07-01 09:15:46

linuxQuora命令行

2009-12-29 14:36:29

Ubuntu cron

2018-06-07 08:25:20

Linux命令行GNU Paralle

2016-10-12 08:38:24

Windows 10Defender命令行

2010-07-15 09:37:47

Perl命令行

2010-09-01 14:23:54

Linux命令行開(kāi)發(fā)

2010-08-20 10:05:23

用戶命令

2009-07-20 09:55:30

華為命令行解析華為認(rèn)證

2019-07-23 13:45:38

LinuxFedora權(quán)限

2010-11-24 15:33:59

mysql命令行參數(shù)

2010-03-10 17:23:37

Python 命令行參

2010-07-15 10:47:22

Perl命令行
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文在线一区二区 | 羞羞视频网站在线观看 | 成人免费视频网址 | 亚洲欧美中文日韩在线v日本 | 欧美一a| 国产成人精品a视频一区www | 成人免费一区二区三区牛牛 | 国产一区不卡 | 97精品超碰一区二区三区 | 亚洲福利在线观看 | 亚洲人免费视频 | 亚洲第一区国产精品 | 91最新入口 | 欧美二区在线 | 欧美综合色 | 精品av| 伦理二区| 91国产视频在线 | 人人干在线视频 | 成人h动漫精品一区二区器材 | 亚洲欧美日韩精品久久亚洲区 | 国产精品一区二区精品 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | www.毛片| 日韩中文字幕免费在线 | 久久一区二区三区四区 | 国产精品久久久久久久久久久久午夜片 | 成年人国产在线观看 | 国产精品美女一区二区三区 | 国产高清精品一区 | 国产精品久久久99 | 欧美激情在线一区二区三区 | 亚洲精品免费视频 | 亚洲欧美激情精品一区二区 | www.夜夜骑.com | 国产精品呻吟久久av凹凸 | 日韩视频中文字幕 | 狠狠亚洲 | 美女视频黄色片 | 久草视频在线看 | 国产乱码精品1区2区3区 |