如何在Windows中获取运行应用程序的PID?

时间:2014-02-06 11:20:39

标签: 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();

我想要做的是让流程的PID开始执行file.exe

有没有办法在Java中做到这一点?

2 个答案:

答案 0 :(得分:1)

这在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 "";
}

来源:http://cnkmym.blogspot.com/2011/10/how-to-get-process-id-in-windows.html

答案 1 :(得分:0)

这个问题已经回答herehere

基本上,没有简单的方法来完成任务,除非您使用JNI库或反射,如链接问题中所示。