【问题标题】:Unable to kill a process when executing jar file using taskkill使用taskkill执行jar文件时无法终止进程
【发布时间】:2012-07-22 16:08:38
【问题描述】:

我有一个从 java swing 应用程序中触发的exe。从 ECLIPSE IDE 运行应用程序时,我可以使用 "taskkill /PID ProcessID " 杀死 exe 。但是当我尝试通过批处理文件为 swing 应用程序运行 jar file 时,exe 并没有被终止,可能是因为我无法获取进程 ID。我正在使用 Windows XP 32 位。任何帮助将不胜感激

String sDosCommand = "cmd /c tasklist /FI " + "\"" + "IMAGENAME eq " + sProcessName + "\"" ;
Process process = Runtime.getRuntime().exec(sDosCommand ); 

这段代码(修改为获得一个特定进程的process ID)给了我Process ID,而我又在Taskkill命令中使用它以类似方式执行

感谢和问候 阿伦·拉吉

【问题讨论】:

  • 贴出你试过的代码
  • String sDosCommand = "cmd /c tasklist /FI " + "\"" + "IMAGENAME eq " + sProcessName + "\"" ;进程进程 = Runtime.getRuntime().exec(sDosCommand ) ;这段代码(修改为获取一个特定进程的进程 ID)为我提供了进程 ID,而我在 Taskkill 命令中使用它以类似方式执行
  • 我认为GuillaumePolet 给出了一个很好的例子,我之前也尝试过。无论如何发布您的完整代码。我认为应该有一些路径相关的问题

标签: java eclipse swing pid


【解决方案1】:

我假设您正在使用ProcessBuilder 来启动您的外部应用程序。如果不是,请考虑使用该类及其 start() 方法来启动外部应用程序,如 Javadoc 中所述。

一旦你调用了start(),你会得到一个Process,你可以在上面调用destroy()来杀死外部应用程序。

Process p = new ProcessBuilder("myCommand", "myArg").start();
...
p.destroy(); // this kills the command "myCommand"

【讨论】:

  • @arunraj 好的,这是 Java 中“旧”的做事方式,但它几乎同样有效。返回的ProcessProcessBuilder.start() 返回的类型相同,因此其余答案也适用于这种情况。只需在process 上调用destroy 即可停止/终止进程。
  • 我已经尝试过了。但是销毁进程并不会停止从中生成的 exe。线程正在停止但我的 exe 继续运行。此外,我正在触发一批进程中的文件,进而触发所需的 exe
【解决方案2】:

我发现问题出在哪里。我正在从批处理文件中触发应用程序 jar。这批还修改了环境变量(准确地说是路径),这阻止了我执行 TASKKILL 命令。我对批处理文件进行了轻微修改以包含 PATH 环境变量。这解决了我的问题。

感谢大家的帮助。 阿伦·拉杰

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多