Java Process无法关闭

最近在修改代码,发现PC机和Android终端同步数据的时候,adb push数百个文件到Android终端,程序就会挂了,调试,发现的问题有:

 1.利用Process类的调用Cmd的时候,Process的所有流:

     process.getOutputStream().close();
     process.getInputStream().close();
     process.getErrorStream().close();

     都必须显示的关闭,同时BufferReader也不能忘了关闭。

2.Process必须调用destroy()。来kill开启的Process。但是有时候destroy方法不起作用,发现的原因是:

     process.waitfor();

     process.destroy();

    waitfor之后直接调用destroy().进程被占用。无法关闭。最好在中间添加Thread.sleep(1000); 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的Process类是用于控制操作系统进程的类。它允许Java程序启动外部进程,并与其进行通信。 通过Process类,可以执行外部命令或应用程序,并获得与其交互的输入和输出流。Process类提供了一些方法来控制和监视进程,例如启动进程、等待进程结束、获取进程的输入流和错误流等。 下面是一个简单的示例,展示了如何使用Process类执行外部命令并获取输出: ```java import java.io.BufferedReader; import java.io.InputStreamReader; public class ProcessExample { public static void main(String[] args) { try { // 执行命令 Process process = Runtime.getRuntime().exec("ls"); // 获取命令输出流 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); // 读取输出 String line; while ((line = reader.readLine()) != null) { System.out.println(line); } // 等待命令执行完成 int exitCode = process.waitFor(); System.out.println("Exit Code: " + exitCode); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述示例中,通过`Runtime.getRuntime().exec()`方法执行了一个`ls`命令,并通过`getInputStream()`方法获取了命令的输出流。然后通过读取输出流的方式,将命令的输出打印到控制台。最后,通过`waitFor()`方法等待命令执行完成,并获取命令的退出码。 需要注意的是,使用Process类执行外部命令时,要注意处理输入流和错误流,以及正确关闭相关资源,以避免可能的资源泄漏。 希望以上信息对你有帮助!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值