java - 从 Java 中确定当前 glibc 版本
问题描述
对于在linux系统上运行的java应用程序,如何确定glibc的底层版本?
背景:我想在运行时确定是否可以使用 conscrypt,现在这似乎需要 glibc 2.14(https://github.com/google/conscrypt/pull/589),但我仍然需要通过回退到标准 Java SSL 代码,优雅地支持在 CentOS 6 或其他较旧的发行版上运行。不幸的是(至少据我所知)如果 Conscrypt 在较旧的发行版上初始化,则无法捕获并从发生的错误中恢复,但如果我可以确定 glibc 版本,我可以选择是否初始化它基于此。
解决方案
执行ldd --version
和解析版本号响应的工作示例。
public class Main {
public static void main(String[] args) throws IOException {
final ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash").command("ldd --version");
processBuilder.redirectErrorStream(true);
final Process process = processBuilder.start();
final StringBuilder stream = readStream(process.getInputStream());
final String version = getVersion(stream.toString());
System.out.println(version);
}
/**
* Read the output stream of the process
*
* @param iStream InputStream
* @return StringBuilder containing the output of the command
*/
private static StringBuilder readStream(InputStream iStream) throws IOException {
final StringBuilder builder = new StringBuilder();
String line;
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(iStream))) {
while ((line = bufferedReader.readLine()) != null) {
builder.append(line);
builder.append(System.getProperty("line.separator"));
}
}
return builder;
}
/**
* Parse the response for the version number.
*
* @param input String response of ldd --version
* @return String of the version, or null if not found
*/
private static String getVersion(String input) {
final Pattern pattern = Pattern.compile("[-+]?[0-9]*\\.?[0-9]+");
final Matcher matcher = pattern.matcher(input);
return matcher.find() ? matcher.group() : null;
}
}
推荐阅读
- javascript - 更改对象数组中的键名 - JS
- neovim - 如何在 Vim 中创建类似 Sublime 的构建系统?
- r - R:如何从两个列表中提取具有相同索引的元素来编写函数
- javascript - 如何为我的蛇游戏添加重启按钮
- windows - 如何使用 LLVM/clang++ 工具链链接 Microsoft Windows 资源 (.res) 文件
- javascript - Vanilla JavaScript XMLHttpRequest - 如何正确设置 Header(示例:Pastebin Api)
- javascript - 处理程序更改在反应js中选择输入对象
- java - 如何让用户在 Java 中选择类型?
- matlab - Matlab程序没有进入if语句
- class - 如何更改班级成员?