使用jsch中ChannelShell,使用readline方法读取执行结果时,被阻塞

最近使用jsch中的ChannelShell,使用BufferedReader的readLine()方法读取返回结果,代码如下:

while ((line = dataIn.readLine()) != null){
    stdout.add(line);
}

执行的时候,代码一直在while循环中,无法跳出该循环。

原因:

        在代码中,使用的是ChannelShell,shell管道是交互模式的,并且调用的又是readLine()方法,此处使用read()方法也是一样的结果。当需要执行的命令全部执行完毕,但是远程机器并不知道已经执行完毕,仍然在等待着接收数据,所以readLine()方法就阻塞在那里了。

解决方法:

        发送exit命令,告诉远程机器执行结束。

猜你喜欢

转载自blog.csdn.net/yu532164710/article/details/81083555