我使用以下代码启动了一个进程
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "path");
try {
Process p = pb.start();
}
catch (IOException ex) {}
现在我需要知道我刚刚启动的进程的pid。
发布于 2011-01-21 01:48:11
目前还没有这方面的公共API。请参阅Sun Bug 4244896,Sun Bug 4250622
作为一种解决方法:
Runtime.exec(...)
类型的对象
java.lang.Process
Process类是抽象的,您得到的是为您的操作系统设计的Process的某个子类。例如,在Mac上,它返回有一个名为pid
的私有字段的java.lang.UnixProcess
。使用反射,您可以很容易地获得此字段的值。诚然,这是一种黑客行为,但它可能会有所帮助。你需要PID
做什么呢?
发布于 2011-04-07 17:32:24
此页面包含如何操作:
http://www.golesny.de/p/code/javagetpid
在Windows上:
Runtime.exec(..)
返回“java.lang.Win32Process”或"java.lang.ProcessImpl“的实例
两者都有一个私有字段“句柄”。
这是进程的操作系统句柄。您必须使用此+ Win32接口来查询PID。该页面有关于如何做到这一点的详细信息。
发布于 2015-10-16 21:33:33
在Unix系统中(Linux和Mac)
public static synchronized long getPidOfProcess(Process p) {
long pid = -1;
try {
if (p.getClass().getName().equals("java.lang.UNIXProcess")) {
Field f = p.getClass().getDeclaredField("pid");
f.setAccessible(true);
pid = f.getLong(p);
f.setAccessible(false);
}
} catch (Exception e) {
pid = -1;
}
return pid;
}
https://stackoverflow.com/questions/4750470
复制相似问题