【问题标题】:How can I create an independent Process with ProcessBuilder or set the working directory with exec()如何使用 ProcessBuilder 创建独立进程或使用 exec() 设置工作目录
【发布时间】:2016-06-06 09:21:35
【问题描述】:

我想调用一个独立于原始进程的进程。所以我可以使用 Runtime.Runtime.getRuntime().exec("java -Xms256M -Xmx256M -jar /home/HauptServer/Games/game1/cloud.jar -p "+port) 但这不会设置工作目录。所以我使用了 ProcessBuilder 并尝试了这个:ProcessBuilder prb = new ProcessBuilder("java","-Xms256M","-Xmx256M","-jar","cloud.jar","-p",""+port).directory(new File("/home/HauptServer/Games/game1")); 但在这种情况下,它并没有独立于我的原始进程运行。 你有什么解决办法吗?

【问题讨论】:

    标签: java process runtime exec processbuilder


    【解决方案1】:

    使用Runtime.getRuntime().exec(String[] cmdarray, String[] envp, File dir)

    来自documentation

    单独的进程中执行指定的命令和参数 使用指定的环境和工作目录。

    不要使用单行命令 (java -jar ...)。使用cmdarray[] 并在dir 指定工作目录

    例子

     String cmdArray[] = new String[7];
     cmdArray[0] = "java";
     cmdArray[1] = "-Xms256M";
     cmdArray[2] = "-Xmx256M";
     cmdArray[3] = "-jar";
     cmdArray[4] = "/home/HauptServer/Games/game1/cloud.jar";
     cmdArray[5] = "-p";
     cmdArray[6] = port;
    

    【讨论】:

    • 感谢您的回答!但是进程仍然是原始进程的子进程,我收到此错误:java.security.AccessControlException: Illegal Thread Group Access in this line where I start the process:Process pr = Runtime.getRuntime().exec(cmdArray, null, new File("/home/HauptServer/Games/game1"));
    • 执行将取决于您的主进程。作为启动进程的用户,有些事情是无法更改的。你有权限在安全策略中运行吗?它允许您运行其他进程而不是 java?
    • 我的意思是,如果您使用的是标准 JVM。如果正在运行的进程以某种方式受到限制(例如小程序),或者如果您有权运行外部进程
    猜你喜欢
    • 2012-01-14
    • 2023-03-17
    • 1970-01-01
    • 2019-01-09
    • 2021-12-29
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多