Java中杀死进程的正确方法

2024-03-06

在 Java 中终止进程的最佳方法是什么?

获取 PID,然后用以下命令杀死它Runtime.exec() ?

Use destroyForcibly() ?

这两种方法有什么区别,还有其他解决方案吗?


如果您要终止的进程已由您的应用程序启动

那么你可能已经参考过它了(ProcessBuilder.start() or Runtime.exec()两者都返回一个引用)。在这种情况下,您可以简单地调用p.destroy()。我认为这是最干净的方法(但要小心:子进程由p可能还活着,检查一下Process.destroy 不会杀死多个子进程 https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4770092了解更多信息)。

The destroyForcibly仅应在以下情况下使用destroy()在一定的超时后失败。简而言之

  1. 终止进程destroy()
  2. 允许进程以合理的超时正常退出
  3. 杀死它destroyForcibly()如果进程还活着

如果您要杀死的进程是外部进程

那么你就没有太多选择:你需要通过操作系统API(Runtime.exec)。在 Windows 上,要调用的程序是taskkill.exe,而在 Mac 和 Linux 上您可以尝试kill.


看一下Java 8 支持 Process.destroyForcously() 和 .isAlive() https://github.com/zeroturnaround/zt-exec/issues/19 and 使用 Java 终止进程 https://stackoverflow.com/questions/6356340/killing-a-process-using-java and 编写一个简单的 Java 应用程序以在指定时间后终止任何进程 http://invisiblecomputer.wonderhowto.com/how-to/code-simple-java-app-kill-any-process-after-specified-time-0133513/了解更多信息。

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

Java中杀死进程的正确方法 的相关文章

随机推荐

  • 如何获取HTTP Post请求的JSON内容?

    我想将 JSON 文件从 Unity 应用程序发送到 Laravel 后端 我的帖子请求似乎有问题 但我不知道它是什么 使用 Unity 发送请求 public void SendRequest serializable struct Of
  • tesseract 无法识别该图像中的这个单词,这正常吗?

    我需要从这样的小图像中提取单词 我在命令行中使用带有西班牙语选项的 tesseract 如下所示 tesseract category png l spa psm 7 category txt 我认为该文本一定很容易被 OCR 解析 但该单
  • JavaScript 中的 array.select()

    JavaScript 是否具有与 Ruby 类似的功能 array select x x gt 3 就像是 array select function x if x gt 3 return true 有Array filter var nu
  • 第一次捆绑安装,堆栈级别太深

    我使用命令创建了一个全新的 Rails 项目rails new qbc database mysql 它完美地创建了所有文件 但是 在捆绑包安装时出现错误 bundle install Fetching gem metadata from
  • 在 RESTful Web 服务中,服务器花很长时间来响应是否可以接受?

    我正在使用 Flask restful 开发 RESTful Web 服务 客户端需要能够请求服务器执行作业 这项工作可能需要大约 1 秒到大约 1 小时才能完成 一般情况下 预计需要 1 5 分钟 作业完成后 客户端需要下载 JSON 转
  • 插入时返回 ID?

    我有一个 INSERT 查询 我希望数据库返回我刚刚插入的行的 ID sqlString INSERT INTO MagicBoxes OwnerID Key Name Permissions Active LastUpdated VALU
  • 有条件切换情况

    我是否在条件下编写了正确的 switch case var cnt div1 p length alert cnt switch cnt case cnt gt 10 cnt lt 20 alert 10 break case cnt gt
  • EL 表达式将整数解析为 long

    我在 JBoss 7 上使用带有 primefaces 的 JSF 2 0 在代码的某些部分 我有以下内容 public void setItemValue int value this value value 并在 xhtml 中
  • 无法从 SwfTreeView 选择复选框

    在我的应用程序中 有一个 swfTreeView 对象 它有 2 个父复选框 Total Systmatic 并且两个父复选框都有 2 个子复选框 EQ FX for Total 和 EX IR for Systematic 我无法选择这些
  • 如何等待流完成管道传输? (节点)

    我有一个 Promise 的 for 循环数组 所以我使用 Promise all 来遍历它们 然后调用 then let promises promises push promise1 promises push promise2 pro
  • 我可以为背景大小实现纯 CSS 后备吗?

    这对于支持的浏览器来说效果很好background size 否则 图像会缩放 2 倍 a background image url img2x jpg 1000x1000 background size 100 height 500px
  • Android自定义EditText和后退按钮覆盖

    我想在显示软键盘时覆盖后退按钮 基本上 当按下后退按钮时 我希望键盘关闭 并且我想将一些文本附加到用户在编辑文本字段中键入的内容上 所以基本上我需要知道键盘何时关闭 经过搜索后 我意识到没有可用的 API 唯一真正的方法是创建 EditTe
  • 如何定位按钮精灵 css

    button1 background E68A00 url wooden jpg repeat x border 2px solid eee height 28px width 115px margin 50px 0 0 50px padd
  • Shell 脚本:获取 python: 命令未找到错误

    当我从 shell 脚本调用 Python 脚本时 它运行良好 python script py 但是当我从 Gerrit 中提取相同的脚本 然后添加调用 Python 脚本的代码后 它给了我以下错误 script sh line 126
  • php require_once 尝试仅在我的生产服务器上包含第二次

    我在各种包含文件的顶部都有这段代码 require once functions php 有时我需要包含几个包含文件来生成页面 并且在我的本地服务器上这工作正常 因为上面的代码告诉它只包含一次functions php 因此它不会尝试声明函
  • MS Entity Framework VS NHibernate 及其派生贡献(FluentNHibernate、Linq for NHibernate)

    我刚刚读过这个article http visualstudiomagazine com Articles 2009 12 01 Entity Sequel aspx Page 1关于实体框架 4 实际上是版本 2 实体框架 http ms
  • 将 for-each 循环替换为 lambda 表达式

    我只是重构一些旧项目以使用 Java 8 的功能 int counter 1 for Checker checker checkers if counter lt checkers size checker setNextChecker c
  • 不要使用 Xcode 8 复制 swift 库吗?

    How to not在 Xcode 8 中自动嵌入 Swift 动态库 我尝试过设置ALWAYS EMBED SWIFT STANDARD LIBRARIES为 否 无论如何默认为 否 但它仍然将 Swift 动态库复制到应用程序包中 我正
  • Require.js 延迟加载远程 url

    我的本地文件系统上有一个名为 moment js 的文件 并使用 require js 加载它 如下所示 initialize function require moment function data console log data 但
  • Java中杀死进程的正确方法

    在 Java 中终止进程的最佳方法是什么 获取 PID 然后用以下命令杀死它Runtime exec Use destroyForcibly 这两种方法有什么区别 还有其他解决方案吗 如果您要终止的进程已由您的应用程序启动 那么你可能已经参