【问题标题】:Start shell script in background from java program从java程序在后台启动shell脚本
【发布时间】:2011-09-13 09:57:53
【问题描述】:

我目前通过如下代码从我的 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 ...;

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

谢谢

【问题讨论】:

  • 不等它结束也意味着你失去了从进程中获取输出的能力,对吧?
  • @Nivas not 如果它是在不同的线程中启动的,那么进程中的 stdout 和 stderr 都可以(并且必须)被捕获

标签: java background exec environment-variables


【解决方案1】:

只需在一个新线程中完成整个事情。

将上面的整个代码包装在一个 Runnable 中并为它启动一个线程。您的主代码可以继续做其他事情。 一旦您从子进程获得结果,在可运行对象中使用一些通知(或观察者模式)来通知相关方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多