gpt4 book ai didi

java - 为 ProcessBuilder 设置环境

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:54 24 4
gpt4 key购买 nike

我在从 Java (1.6) 设置 Linux 环境时遇到一个奇怪的问题;特别是“PATH”变量。

简而言之,我有一个用于运行 native 进程的管道,它使用 java.lang.ProcessBuilder。用户可以选择通过名为 environmentHashMap 设置环境变量:

ProcessBuilder pb = new ProcessBuilder(args);
Map<String, String> env = pb.environment();
if (environment != null)
env.putAll(environment);
Process process = pb.start();

env 变量设置正确,如果我将它转储到控制台,并为 PATH 变量设置正确的值。但是,运行该进程会导致抛出 Exception:

java.io.IOException: error=2, 没有那个文件或目录

相同的进程在终端 shell 中使用相同的环境变量运行良好。为了对此进行测试,我在终端中设置环境后运行了 Eclipse。在这种情况下,ProcessBuilder 进程正确运行。

所以必须发生的事情是 ProcessBuilder 没有使用我为其设置的环境,而是使用当前的系统环境。

我在网上找不到这个问题的满意答案。也许这是一个特定于操作系统的问题?或者我还缺少其他东西?

最佳答案

我不认为这是一个错误,我认为这是你对环境变量的边界和作用的理解有问题。 ProcessBuilder.environment() 包含环境变量,这些变量对于生成的进程来说是“进程本地的”。它们不是系统范围或登录范围的,甚至不会影响 ProcessBuilder 运行的环境。

ProcessBuilder.environment() 映射包含进程局部变量,生成的进程只能看到这些变量。显然,看到 ProcessBuilder.environment() 的生成处理的先决条件是成功生成进程,这是我认为您甚至没有达到的一点。

据我所知,(从 Java)修改当前正在运行的进程的 PATH 是不可能的,这是我认为你期望发生的(或能够做到的)。所以我认为您必须将 ProcessBuilder 指向您尝试启动的可执行文件的完全限定路径(或者确保在您启动将使用 ProcessBuilder 的 JVM 之前正确设置 PATH,这是您在“工作”中所做的' 在启动 IDE 之前在终端中设置它的场景)。

关于java - 为 ProcessBuilder 设置环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10035383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com