从java程序后台启动shell脚本

tis*_*sek 3 java background exec environment-variables

我目前通过代码从我的Java启动一个shell脚本,如下所示:

ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.directory("/directory/where/the/script/is/located/");
String[] command = new String[]{"sh", "myScript.sh"};
processBuilder.command(command);
Map<String, String> env = processBuilder.environment();
//tweak the environment with needed additions
env.put(...);
Process p = processBuilder.start();

stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

// read the output from the command
String line;
while ((line = stdInput.readLine()) != null)
{
  logger.fine(line);
}
p.waitFor();
int returnCode = p.exitValue();
// Return something according to the return code
return ...;
Run Code Online (Sandbox Code Playgroud)

如果我现在想要启动脚本而不是等待它结束(因此失去了根据返回代码返回的能力),但仍然能够预先调整环境?我该怎么办?

谢谢

Sur*_*ran 5

只需在新线程中执行整个操作即可.

将上述代码包装在Runnable中并为其启动一个Thread.您的主要代码可以继续做其他事情.在runnable中,一旦从子进程获得结果,就使用一些notify(或者观察者模式)来通知感兴趣的各方.