【问题标题】:Wait for JSch command to execute instead of hard coding a fixed time to wait for等待 JSch 命令执行而不是硬编码固定时间等待
【发布时间】:2019-08-19 14:05:09
【问题描述】:
Channel channel=session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect();
while (channel.getExitStatus() == -1){
   try{Thread.sleep(1000);}catch(Exception e){System.out.println(e);}
}   
channel.disconnect();

在上面的代码中,我们添加行 Thread.sleep(1000); 给系统足够的时间来执行命令。但是,当我将时间间隔从 1000 ms 更改为 200 ms 时,该命令不会执行。

同样在一些速度较慢的服务器中,该命令也可能在 1000 毫秒 的指定时间间隔内无法执行。是否有任何其他动态方法可以在下一个开始执行之前等待命令完全执行,而不是对值进行硬编码,在自动化时尤其需要

【问题讨论】:

标签: java ssh jsch


【解决方案1】:

您必须循环读取响应的块,直到 channel.isClosed() 返回 true。

此时你可以调用channel.getExitStatus()获取进程退出码,然后关闭通道。

如果您不想在循环读取响应字节时消耗 CPU 周期,请在每次读取之间添加 Thread.sleep(100)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-04
    • 2020-06-14
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多