从输入流中读取的JSCH会不时挂起

时间:2015-07-28 10:12:07

标签: jsch

我使用的是jsch-0.1.53。

为了执行命令并返回它的输出,我编写了下一段代码:

    @Override
public String executeAndGetOutput(CheckPointSSHConnection connection, String command) throws IOException , JSchException{
    logger.debug("Executing command \"" + command + "\"");
    StringBuilder retVal = new StringBuilder();
    ChannelExec channel = null;
    InputStream in=null;
    InputStream errStream=null;
    try {
        Session session = connection.getSession();
        channel = (ChannelExec) session.openChannel("exec");//only shell
         in = channel.getInputStream();
        errStream = channel.getErrStream();
        channel.setCommand(command);
        channel.connect(10000);
        String errInStr = StringUtils.toString(errStream);
        String inStr = StringUtils.toString(in);
        return inStr+errInStr;
    } finally {
        IOUtils.close(in);
        IOUtils.close(errStream);
        if (channel != null) {
            try {
                channel.disconnect();
            } catch (Throwable throwable) {
                logger.warn("An exception occured while trying to close ssh chanel. Message:",
                        throwable.getMessage());
            }
        }
    }
}

问题是,不时读取errStream会挂起并阻止该线程。

有人可以告诉我我做错了吗?

我执行的命令是load_indicators --add -a detect -i /tmp/sample_file.csv,它是Checkpoint CLI

0 个答案:

没有答案