没有ProcessHandle
时间: 2024-01-09 22:05:28 浏览: 119
Java930.zip
很抱歉,我没有注意到你的环境是 Java 8,而 `ProcessHandle` 是在 Java 9 中引入的 API。在 Java 8 中,你可以使用 `ProcessBuilder` 类来执行 Linux 命令并获取进程 ID。
以下是一个使用 `ProcessBuilder` 获取进程 ID 的示例:
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class LinuxCommandExecutor {
public static void main(String[] args) {
String command = "your linux command here";
try {
ProcessBuilder builder = new ProcessBuilder(command);
Process process = builder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
reader.lines().forEach(line -> {
// do something with the output
});
long pid = getPid(process); // get the pid
process.waitFor();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static long getPid(Process process) throws Exception {
long pid = -1;
if (process.getClass().getName().equals("java.lang.UNIXProcess")) {
Field field = process.getClass().getDeclaredField("pid");
field.setAccessible(true);
pid = field.getLong(process);
field.setAccessible(false);
}
return pid;
}
}
```
请注意,这个示例中使用了 `ProcessBuilder` 类来创建进程,并使用 `getPid()` 方法来获取进程 ID。`getPid()` 方法使用反射来获取进程 ID,这是因为进程 ID 是 `UNIXProcess` 类的一个私有字段。
阅读全文