我是靠谱客的博主 美好网络,最近开发中收集的这篇文章主要介绍Java获取Process进程ID,并杀掉相应的进程树,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在使用java过程中,很多人可能遇到过这样的问题,当我们通过cmd.exe执行命令的时候,如下:
Runtime rt = Runtime.getRuntime();
Process process 

= rt.exec(cmd);
java会在后台进程中开启一个cmd.exe的进程,当我们想要杀死该进程的时候使用process.destroy(),只能杀死java程序启动的cmd.exe,无法杀死cmd.exe创建的进程,也就是说无法杀死进程树,基于以上问题,我的处理方式是:
(1)获取process进程ID;
(2)通过taskkill杀死进程树;
      privatestatic void killProcessTree(Process process)
      {
              try {
                          Field f =process.getClass().getDeclaredField("handle");
                          f.setAccessible(true);
                          long handl =f.getLong(process);
                          Kernel32kernel = Kernel32.INSTANCE;
                          WinNT.HANDLEhandle = new WinNT.HANDLE();
                          handle.setPointer(Pointer.createConstant(handl));
                          int ret =kernel.GetProcessId(handle);
                          Long PID =Long.valueOf(ret);
                          String cmd =getKillProcessTreeCmd(PID);
                          Runtime rt =Runtime.getRuntime();
                        ProcesskillPrcess = rt.exec(cmd); 
                        killPrcess.waitFor();
                        killPrcess.destroy();
              }catch(Exception e)
              {
                    e.printStackTrace();
              }
      }

      privatestatic String getKillProcessTreeCmd(Long Pid)
      {
            Stringresult = "";
            if(Pid !=null)
                  result ="cmd.exe /c taskkill /PID "+Pid+" /F /T ";
            returnresult;
      }

这里需要引入两个jar包,分别为jna.jar和platform.jar,下载地址:https://java.net/projects/jna/downloads/directory/3.3.0

这样可以很方便的获取到自己创建的Process的PID,并且在销毁的时候也可以把子进程杀死。

引用: https://github.com/flapdoodle-oss/de.flapdoodle.embed.process/blob/master/src/main/java/de/flapdoodle/embed/process/runtime/Processes.java

最后

以上就是美好网络为你收集整理的Java获取Process进程ID,并杀掉相应的进程树的全部内容,希望文章能够帮你解决Java获取Process进程ID,并杀掉相应的进程树所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部