gpt4 book ai didi

java - 我的 Java 程序在调用 shell 命令后挂起

转载 作者:行者123 更新时间:2023-12-02 00:23:38 25 4
gpt4 key购买 nike

我写了一个小程序来启动Hive Server。启动 Hive Server 的命令位于 shell 文件中。当我调用 shell 文件来启动 Hive Server 时,它往往会启动并挂起。程序有问题吗?

代码:

            try
{
String cmd = "/home/hadoop/sqoop-1.3.0-cdh3u1/bin/StartServer.sh"; // this is the command to execute in the Unix shell

// create a process for the shell
ProcessBuilder pb = new ProcessBuilder("bash", "-c", cmd);
pb.redirectErrorStream(true); // use this to capture messages sent to stderr
Process shell = pb.start();
InputStream shellIn = shell.getInputStream(); // this captures the output from the command
// wait for the shell to finish and get the return code
// at this point you can process the output issued by the command

// for instance, this reads the output and writes it to System.out:
int c;
while ((c = shellIn.read()) != -1)
{
System.out.write(c);
}

// close the stream
shellIn.close();
}
catch(Exception e)
{
e.printStackTrace();
e.printStackTrace(pw);
pw.flush();
System.exit(1);
}

请让我知道这一点。我在程序中错过了什么吗?

谢谢。

最佳答案

看起来您的程序正在执行您告诉它的操作。

前几行确实应该启动 Hive 服务器。之后的行从服务器进程的标准输出中读取,并将每个字符回显到 Java 进程的控制台。只要 Hive 服务器的输出流存在,您的 Java 进程就会处于循环中(进行阻塞 I/O 调用)。

也就是说,只要 Hive 服务器正在运行,您的 Java 进程就会处于循环中并回显输出。

这是你想要的吗?如果是这样,那么它显然将无法退出。如果不是,那么您根本没有理由从服务器的输入流中读取数据,并且您的 Java 程序可以在启动服务器进程后退出。或者,如果您想监听输出在 Java 进程中执行其他操作,则需要 use multiple threads为了同时做两件事。

关于java - 我的 Java 程序在调用 shell 命令后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10429681/

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