【发布时间】:2011-11-24 13:21:38
【问题描述】:
我希望能够做这样的事情:
Process p = getRunningProcess(pid)
如果有办法,如何创建进程(使用 java、使用 python、从 shell 等...)是否重要?
【问题讨论】:
我希望能够做这样的事情:
Process p = getRunningProcess(pid)
如果有办法,如何创建进程(使用 java、使用 python、从 shell 等...)是否重要?
【问题讨论】:
可以从 Java 应用程序附加到另一个 JVM 进程(例如能够to monitor what's going on and potentially detect problems before they happen)。您可以使用Attach API 来执行此操作。不太了解附加到非 JVM 进程。
String name = ...
List vms = VirtualMachine.list();
for (VirtualMachineDescriptor vmd: vms) {
if (vmd.displayName().equals(name)) {
VirtualMachine vm = VirtualMachine.attach(vmd.id());
String agent = ...
vm.loadAgent(agent);
// ...
}
}
【讨论】:
是的,有一种方法可以使用 ProcessHandle 附加任何非 JVM 进程。
这里是一个代码示例,它启动计算器并使用 pid 将其关闭。
Process calc = Runtime.getRuntime().exec("gnome-calculator");
Thread.sleep(2000);
long pid = calc.pid();
Optional<ProcessHandle> optionalProcessHandle = ProcessHandle.of(pid);
optionalProcessHandle.ifPresent(ProcessHandle::destroy);
但请确保运行 Java SE/JDK 11 或更高版本并导入 java.util.Optional;。
请参阅文档以了解可以与 ProcessHandle 一起使用的更多方法:
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ProcessHandle.html
【讨论】: