【问题标题】:How to get a process id of exe running through java program如何获取通过java程序运行的exe的进程id
【发布时间】:2014-07-01 00:22:29
【问题描述】:

我正在通过 java runtime api 运行一个 exe

     Process process = runTime.exec("cmd.exe /c start abc.exe "+Id, null, new       File("D:/My"));

并像这样使用 jna 检索进程 ID -

    Kernel32.INSTANCE.GetProcessId((Long) f.get(process));

但返回的进程 ID 不是 abc.exe 而是 cmd.exe .....我需要 abc.exe 的进程 ID。不知道如何获得,任何人都可以帮助。

【问题讨论】:

    标签: java windows jna pid


    【解决方案1】:

    我无法通过 cmd.exe 获取 exe 启动的进程 ID,但我的目的是通过使 cmd.exe 等待子 exe 使用以下命令运行来达到目的

    Process process = runTime.exec("cmd.exe /c start /wait abc.exe "+Id, null, new       File("D:/My"));
    

    我使用 jna-api 获得了 cmd.exe 的进程 ID

    【讨论】:

      【解决方案2】:

      processjava.lang.Process 类型的对象。您可以使用反射API获取abc.exe的进程id。

      Field field = process.getClass().getDeclaredField("pid");
      field.setAccessible(true);
      System.out.println( field.get( process ) );
      

      【讨论】:

      • +1 注意:这将给出正在运行的cmd.exe 的进程,而不是它运行的任何进程的进程ID。
      • 这仅适用于 Unix 类型的操作系统。在 Windows 下有一个“句柄”字段,您可以使用类似的方法访问,但它不反映已启动进程的操作系统 PID;但是您可以使用 jna 访问它,如下所述:stackoverflow.com/a/43426878/170637
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多