动态等待JSch命令执行而不是硬编码固定时间等待

时间:2014-03-29 17:11:06

标签: java jsch

  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 ms 的指定时间间隔内执行。有没有其他动态方法等待命令在下一次开始执行之前完全执行而不是硬编码值,在自动化时特别需要?

1 个答案:

答案 0 :(得分:1)

您必须循环读取响应的块,直到channel.isClosed()返回true。 此时,您可以调用channel.getExitStatus()来获取进程退出代码,然后关闭该通道。 如果您不想在循环读取响应字节时刻录CPU周期,请在每次读取之间放置一个Thread.sleep(100)。