Java 如何获取Windows下运行的应用程序的PID?

Java 如何获取Windows下运行的应用程序的PID?,java,windows,pid,Java,Windows,Pid,我这里有我的代码片段: ArrayList<String> cmd_exec_installer = new ArrayList<String>(); cmd_exec_installer.add("file.exe"); Process proc = new ProcessBuilder(cmd_exec_installer).start(); ArrayList cmd_exec_installer=new ArrayList(); cmd_exec_inst

我这里有我的代码片段:

 ArrayList<String> cmd_exec_installer = new ArrayList<String>();
 cmd_exec_installer.add("file.exe");
 Process proc = new ProcessBuilder(cmd_exec_installer).start();
ArrayList cmd_exec_installer=new ArrayList();
cmd_exec_installer.add(“file.exe”);
Process proc=new ProcessBuilder(cmd_exec_installer).start();
我要做的是获取开始执行
file.exe
的进程的PID


在Java中有这样做的方法吗?

这个问题已经得到了回答和解决


基本上,没有简单的方法来完成这项任务,除非您使用链接问题中建议的库或反射。

这在Windows 7上非常适合我:

//Imports
import com.sun.jna.*;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.WinNT;


private String getWindowsProcessId(Process proc) 
{
    if (proc.getClass().getName().equals("java.lang.Win32Process")
            || proc.getClass().getName().equals("java.lang.ProcessImpl")) {
        try {
            Field f = proc.getClass().getDeclaredField("handle");
            f.setAccessible(true);
            long handl = f.getLong(proc);
            Kernel32 kernel = Kernel32.INSTANCE;
            WinNT.HANDLE handle = new WinNT.HANDLE(); 

            handle.setPointer(Pointer.createConstant(handl));
            return Integer.toString(kernel.GetProcessId(handle)); 

        } catch (Throwable e) {
        }
    }
    return "";
}

来源:

谢谢@阿尔贝托。我能够得到主进程的PID,但它仍然不能杀死主进程的子进程。我仍在努力寻找一个好的解决方案,或许是一个变通办法。