关于Runtime.getRuntime().exec 进程会一直被挂起,一直在等待的原因。

为了方面广大程序员,我还是决定将改bug写在我的博客上。

在网上查找到的关于Runtime.getRuntime().exec执行命令的方法首先出现的的是这个:

try
		{
			Process process = Runtime.getRuntime().exec("su");
			inputStream = new DataInputStream(process.getInputStream());
			outputStream = new DataOutputStream(process.getOutputStream());
			errinputStream = new DataInputStream(process.getErrorStream());
			 process.getErrorStream();
			outputStream.writeBytes(cmd);
			outputStream.writeBytes(shellCmd);
			//outputStream.writeBytes("ls");
			outputStream.flush();
			String temp = "";
			
			
			
			while((temp = inputStream.readLine())!=null)
			{
				name= name+temp;
				Log.i("tyty", "name:"+name);
			}
			
		  
			process.waitFor();
			Log.i("tyty", "name:---------");
			int result = process.exitValue();
			Log.i("tyty", "result"+result);
		}
		catch (IOException e)
		{
			
			e.printStackTrace();
		}
		catch (InterruptedException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			try
			{
				inputStream.close();
				outputStream.close();
			}
			catch (IOException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		

但是这个程序在我的测试机:电信版的m3 上,会没有执行结果,进程会一直在挂起,一直等待而没有结果。不废话直接上解决方法:

outputStream.close();
<span style="white-space:pre">	</span>这行代码提前到 <pre name="code" class="java">process.waitFor();
执行,就能看到inputStream里面有数据了。
 
demo的sdk版本是4.0. 如果大神能解释为什么这样,希望能留言,让小弟膜拜!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值