java中如何销毁进程

2024-04-26

我写了下面的代码。要从 Java 应用程序运行 bat 文件,我使用 process.exec()。但蝙蝠有时可能会挂起,所以我需要为此过程设置一个超时。我启动一个新线程并在线程中新建一个进程,我在线程中设置超时,并在超时时杀死线程。但我发现超时时进程无法被销毁。所以我很困惑如何杀死进程?

代码:

流吞噬者:

import java.util.*;

import java.io.*;

class StreamGobbler extends Thread
{
    InputStream is;
    String type;

    StreamGobbler(InputStream is, String type)
    {
        this.is = is;
        this.type = type;
    }

    public void run()
    {
        try
        {
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line=null;
            while ( (line = br.readLine()) != null)
                System.out.println(type + ">" + line);    
            } catch (IOException ioe)
              {
                ioe.printStackTrace();  
              }
    }
}

Main:

public class test
{

    public static void main(String args[]) throws InterruptedException

    {
        Runnable r = new ShengThread();
        Thread sheng = new Thread(r);
        sheng.start();
        sheng.join(1000);
        if (sheng.isAlive()) {
            sheng.interrupt();
        }

        if (sheng.isAlive()) {
            System.out.println("It is dead.");
        }



    }
}

class ShengThread implements Runnable {

    public void run() {

        Process proc = null;

        try
        {            
            String osName = System.getProperty("os.name" );
            String[] cmd = new String[3];
            if( osName.equals( "Windows XP" ) )
            {
                cmd[0] = "cmd" ;
                cmd[1] = "/C" ;
                cmd[2] = "c:\\status.bat";
            }


            Runtime rt = Runtime.getRuntime();

            System.out.println(osName+"Execing " + cmd[0] + " " + cmd[1] 
                               + " " + cmd[2]);
            try {
                proc = rt.exec(cmd);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // any error message?
            StreamGobbler errorGobbler = new 
                StreamGobbler(proc.getErrorStream(), "ERROR");            

            // any output?
            StreamGobbler outputGobbler = new 
                StreamGobbler(proc.getInputStream(), "OUTPUT");

            // kick them off
            errorGobbler.start();
            outputGobbler.start();

            // any error???
            int exitVal = proc.waitFor();
            System.out.println("ExitValue: " + exitVal);        
        } catch (InterruptedException t)
          {
            System.out.println("start\n");
            proc.destroy();
            t.printStackTrace();
          }

    }
}

The Process.destroy() http://download.oracle.com/javase/6/docs/api/java/lang/Process.html#destroy%28%29方法强行破坏外部进程......如果可能的话。 (在某些情况下,您无法销毁进程,但这只是轻微相关。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中如何销毁进程 的相关文章

  • 如何像java中的make一样程序化生成塞尔达传说

    我将如何用java制作程序生成的地图 游戏本身就像塞尔达传说是程序生成的 有帮助吗 不久前的 塞尔达传说 地图使用等距平铺视图 您需要做的第一件事是将等距图块集加载到您的程序中 我确信您可以找到塞尔达图块集 然后 您需要决定如何按程序生成地
  • 同步不经常更新的哈希图的最佳方式

    我有一个在应用程序中使用的 HashMap 数据是在应用程序初始加载期间从数据库填充的 然后它始终只是读取并且从不更新 会有多个线程不断地读取数据 由于数据永远不会更新 因此我们目前不使用任何同步 仅使用 HashMap 我们现在定义的方式
  • 搜索栏小部件未启动可搜索活动

    我正在尝试使用操作栏中的搜索栏小部件在我的 Android 应用程序上实现搜索 我正在关注 http developer android com guide topics search search dialog html http dev
  • java.library.path 中没有 ocijdbc12

    我正在尝试使用 OCI 驱动程序通过 java 程序连接到 oracle 以下是配置 Windows 7 32 位 JDK 1 7 Oracle 客户端 11g R2 ojdbc7 jar在我的独立应用程序的类路径中 但我收到以下异常 Ex
  • Android 中无网络、断线的情况如何处理?

    我有一个应用程序需要连接到 Internet 才能执行某些操作 但当没有可用的 Internet 时 它会崩溃 我读到 如果没有互联网 我需要使用 try catch 括号 我尝试使用它 正如您在 AsyncTask 中看到的那样 但它不起
  • Android 2.x 天城文 unicode 问题

    我正在尝试使用以下代码支持 android 2 x 的梵文字体 即使 android 2 x 无法渲染梵文字体 除了 raswa 和 dirga 存在一些问题之外 代码工作正常 是否有可能在 android 2 x 中获得正确的梵文表示形式
  • 如何滚动到 div 元素底部 Selenium Webdriver

    我有一个用例 其中网页上有一个 div 元素 只要您单击链接 它就会出现一个弹出对话框 它不是实际的弹出窗口 它类似于当您单击链接进行检查时在 Facebook 中打开的对话框 对您的帖子的反应等 我使用 Selenium WebDrive
  • springdoc-openapi:如何添加POST请求的示例?

    Controller有以下方法 ApiResponses value ApiResponse responseCode 200 GetMapping value API URI PREFIX PRODUCTS URI produces Me
  • Android源代码中PathClassLoader的实例是在何时何地创建的?

    当我研究android源码时 我注意到app中的通用类加载器是一个实例PathClassLoader 并且该类中有两个构造函数 一种是这样的 public PathClassLoader String dexPath ClassLoader
  • 使用 Google Guava 进行不区分大小写的排序

    目前 我在两个不同的地方使用以下两段代码来创建一个排序的 不可变的列表 return Ordering natural immutableSortedCopy iterable and return Ordering usingToStri
  • SQL状态[99999];错误代码[17004];无效的列类型:1111 使用 Spring SimpleJdbcCall

    大家好 我正在使用 spring 简单的 JDBC 模板来调用 oracle 过程 下面是我的代码 步骤 create or replace PROCEDURE get all system users pi client code IN
  • @Service 中带有 Kotlin 的 Spring Boot @Autowired 始终为 null

    目前 我尝试使用 Kotlin 重写我的 Java Spring Boot 应用程序 我遇到了一个问题 在我所有的类中都用 Service依赖注入无法正常工作 所有实例都null 这是一个例子 Service Transactional o
  • 将列表沿元素拆分为子列表

    我有这个清单 List
  • 信任所有将文件发送到 https Web 服务的 java 类

    我需要编写自己的类来告诉 mule 与服务 wsdl 的 https 连接已验证 我的 mule 项目已经接近完成 但最后一块丢失了 在特定的 url 发送文件 我想要实现的目标 建立连接并将 xml 发送到目标 url 读取 xml 格式
  • 找不到元素“ehcache”的声明

    我正在我的 Web 应用程序中实现 url 缓存 运行时 ehcache xml 文件出现错误 我正在使用 spring 2 5 jar 文件 ehcache xml
  • hibernate session.flush 和 spring @transactional

    我在我的应用程序中使用 Spring 和 Hibernate 并使用 Spring Transaction 所以我有一个带注释的服务层 Transaction方法和 DAO 层具有数据库查询方法 Transactional readOnly
  • 如何从 Ant 构建文件设置 Eclipse 构建路径和类路径?

    关于 Ant 和 Eclipse 有很多讨论 但之前的答案似乎对我没有帮助 事情是这样的 我正在尝试构建一个可以从命令行使用 Ant 成功编译的 Java 程序 更令人困惑的是 我尝试编译的程序是 Ant 本身 我真正想做的是将这个项目引入
  • 在java中获取调用层次结构

    我在追踪错误时遇到了很大的困难 了解哪个方法调用了某个方法会很有帮助 有没有一种简单的方法可以从java获取调用层次结构 Java 是应用程序的一小部分 因此我无法在 eclipse net beans 中编译和运行整个应用程序 因此我无法
  • 我想在Java中使用关于随机索引的索引

    我使用Java 当我在Java中使用ArrayList时 如果我随机访问索引号 这可能吗 如果这是不可能的 我应该怎么做 例如 ArrayList
  • Spring MVC 中拦截器和过滤器的区别

    我有点困惑Filter and Interceptor目的 据我从文档中了解到 Interceptor在请求之间运行 另一方面Filter在渲染视图之前运行 但在控制器渲染响应之后运行 那么两者的区别在哪里postHandle 在拦截器和d

随机推荐

  • Docker LABEL 用于在多阶段构建中访问构建镜像

    在 CI 构建期间 我通过添加以下内容从多阶段 Docker 构建 测试报告 中的构建映像中提取构建工件 LABEL构建步骤 然后使用带标签的图像创建一个容器以提取工件 这似乎在 Mac 版 Docker Desktop 中被破坏了 或者我
  • Android 上的 SQLite 如何处理长字符串?

    我想知道 Android 的 SQLite 实现如何处理长字符串 从 sqlite 的在线文档中读取 它说 sqlite 中的字符串限制为 100 万个字符 我的弦肯定更小 我正在创建一个简单的 RSS 应用程序 在解析 html 文档并提
  • Python 中的静态变量继承

    我正在为 Blender 的一个项目编写 Python 脚本 但我对该语言还很陌生 我感到困惑的是静态变量的使用 这是我目前正在处理的代码片段 class panelToggle bpy types Operator active Fals
  • 使用二进制遮罩遮罩 RGB 图像

    我在 MATLAB 中读入了一个 RGB 图像 M x N x 3 矩阵 我还有一个图像的二进制掩码 M x N 矩阵 对于某些感兴趣的区域来说它只是 0 而其他地方都是 1 我正在尝试找出如何使用该二进制掩码来掩蔽 RGB 图像 我尝试过
  • Android 将位图保存到 SD 卡

    我有一个按钮 我希望当我单击它时 图像会保存到 SD 卡中 或内部存储 如 htc one x 我们没有像 SD 卡这样的外部存储 这是我的代码 sd setOnClickListener new View OnClickListener
  • 我可以为我的 r 闪亮界面使用 index.html 和 ui.r 吗?

    在参照this http shiny rstudio com articles html ui html关于如何完全用 HTML 构建闪亮的应用程序 我想知道是否有任何方法可以将这种方法与传统的 ui r 方法结合使用 Reason Thi
  • Akavache 的 GetObject 在等待时挂起。知道这里出了什么问题吗?

    我有一个 Xamarin Forms 应用程序 在我的 App 类中包含以下代码 是的 这只是演示该问题的示例 public App BlobCache ApplicationName MyApp BlobCache EnsureIniti
  • Laravel 验证 - 输入必须是数组中的项目之一

    Laravel 5 中是否有内置验证器来检查值是否在我的白名单值数组中 例如 rules field name gt required in array yes no maybe There s in http laravel com do
  • 如何在测试执行之前强制使用 Spring 上下文的新版本

    我用SpringJUnit4ClassRunner用于编写集成测试 我也用 DirtiesContext对于将上下文置于损坏状态的测试 并且效果很好 但现在我有一个测试 在静态初始化器中设置一个重要的 SystemProperty 该初始化
  • 如何从电子邮件地址检索姓名

    使用javascript 我们如何从字符串中删除 gmail com或 aol com 以便只留下名称 var string email protected cdn cgi l email protection 只会是 johdoe 吗 我
  • 如何在Android Studio 1.0.0中更改logcat字体大小? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 如何在Android Studio 1 0 0中更改logcat字体大小 我只找到了在 Android Studio 中
  • Lambda 演算和教会数字混淆

    我正在尝试了解 lambda 演算和丘奇数字的基础知识 我已经进行了大量的阅读和练习 但我似乎一直试图了解某些函数是如何工作的 我坚持的例子如下 也许有人可以解释我哪里出了问题 1 的丘奇数可以表示为 f x f x The exponen
  • 如何将 Python 中的 MS Botframework 部署到 Azure

    我一直在玩 Botframework 并尝试从 git 上传示例代码https github com Microsoft botbuilder python tree master samples EchoBot with State ht
  • 在 Mobile Safari 中重用 HTML5 音频对象

    我希望在 iPad 上的 Mobile Safari 中运行的 Web 应用程序上播放一个简短 小于 1 秒 的音频文件 以响应用户输入 同时将事件和音频播放之间的延迟降至最低 在页面重新加载之间可以多次触发播放 因此我想缓存音频文件 以下
  • Django allauth Facebook 本地开发

    我在用着Django allauth https github com pennersr django allauth对于正在开发的网站的 Facebook 身份验证 并进行了相应的设置 在 facebook 的 facebook 应用程序
  • 在 PyGTK 中,显示 PNG 文件的简单方法是什么?

    以下 PyGTK 代码在窗口中显示 PNG 文件 是否有更简单或更好的方式来显示 PNG 文件 例如使用 gtk DrawingArea 例如 如何调整文件大小 import gtk import pygtk pygtk require 2
  • 使用 datashader、holoviews 和 bokeh 进行地理映射时出现问题

    我正在尝试使用全息视图 数据着色器和散景将谷歌手机历史记录位置映射到地图上 大部分与 datashader 网站中给出的示例非常相似 但是当我这样做时 地图叠加不起作用 因为纬度 经度被破坏了 import datashader as ds
  • igraph (R) 中仅在根和终端顶点上添加标签?

    inst2 c 2 3 4 5 6 motherinst2 c 7 8 2 10 11 km c 20 30 40 25 60 df2 data frame inst2 motherinst2 df2 cbind df2 km g2 gra
  • 带有任意 AND 子句的动态 spring data jpa 存储库查询

    我在用着Spring data jpa repositories 需要提供不同字段的搜索功能 搜索前输入字段是可选的 我有 5 个字段EmployeeNumber Name Married Profession and DateOfBirt
  • java中如何销毁进程

    我写了下面的代码 要从 Java 应用程序运行 bat 文件 我使用 process exec 但蝙蝠有时可能会挂起 所以我需要为此过程设置一个超时 我启动一个新线程并在线程中新建一个进程 我在线程中设置超时 并在超时时杀死线程 但我发现超