如何使用 ProcessBuilder 设置工作目录

2022-09-01 05:40:53

我正在尝试在ubuntu中的主目录中启动一个进程。我不断得到一个被拒绝的例外,我不知道为什么。代码如下:

Process p = null;
ProcessBuilder pb = new ProcessBuilder("/home");
p = pb.start();

这是例外:

Exception in thread "main" java.io.IOException: Cannot run program "/home": 

java.io.IOException: error=13, Permission denied
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:475)
        at tester.Main.main(Main.java:30)
Caused by: java.io.IOException: java.io.IOException: error=13, Permission denied
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
        at java.lang.ProcessImpl.start(ProcessImpl.java:81)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:468)
        ... 1 more
Java Result: 1

答案 1

您正在尝试执行 /home,但它不是可执行文件。流程生成器的构造函数参数是要执行的命令。

您想要设置工作目录。您可以通过目录方法进行操作。

下面是一个完整的示例:

Process p = null;
ProcessBuilder pb = new ProcessBuilder("do_foo.sh");
pb.directory(new File("/home"));
p = pb.start();

答案 2