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,但它仍然不能杀死主进程的子进程。我仍在努力寻找一个好的解决方案,或许是一个变通办法。