Java 当通过JSCH远程启动时,如何识别已完成执行的应用程序?

Java 当通过JSCH远程启动时,如何识别已完成执行的应用程序?,java,jsch,channel,Java,Jsch,Channel,下面是一个场景 我正在通过ssh(JSCH)远程运行应用程序。。现在,我想在应用程序启动到应用程序结束时从一个文件中读取数据(该文件不断更新一些值)。 在启动应用程序的“channel.connect”之前,我开始将数据从该文件复制到另一个目标文件 现在,我的问题是如何知道应用程序何时完成,以便停止将数据从一个文件复制到另一个文件 我尝试了channel.isClosed和isEOF等选项来检查应用程序是否已结束!但是这两种方法似乎都不起作用,而且代码一直在运行(由于while循环) [我已经了

下面是一个场景

我正在通过ssh(JSCH)远程运行应用程序。。现在,我想在应用程序启动到应用程序结束时从一个文件中读取数据(该文件不断更新一些值)。 在启动应用程序的“channel.connect”之前,我开始将数据从该文件复制到另一个目标文件

现在,我的问题是如何知道应用程序何时完成,以便停止将数据从一个文件复制到另一个文件

我尝试了channel.isClosed和isEOF等选项来检查应用程序是否已结束!但是这两种方法似乎都不起作用,而且代码一直在运行(由于while循环)

[我已经了解到,即使执行命令,通道也不需要自行关闭….]。。。那我能做什么呢???有谁能给我建议一些方法来完成这件事吗

       String fileNameToRead = "fileNameToRead";
      File file =new File(fileNameToRead );                 
      File statText =
              new File(destinationFile);

     FileOutputStream is = new FileOutputStream(statText);
     OutputStreamWriter osw = new OutputStreamWriter(is);    
     Writer w = new BufferedWriter(osw);        

     String lastLine="--check--";

      InputStream in=channelForApplication.getInputStream();

      channelForApplication.connect();          

    byte[] tmp=new byte[1024]; 
    while(true){

        lastLine=getLastLine(file);  // method to get the last line of the Constantly updating file.
        w.write(lastLine);
        w.write("\n");           

        while(in.available()>0){                
          int i=in.read(tmp, 0, 1024);  
          System.out.println(new String(tmp, 0, i));
          if(i<0)break;          
        }   
       // System.out.printf("Get the EOF FUNCTION To CHECK-->"+channelForApplication.isEOF());
        if(channelForApplication.isEOF()){
              System.out.println("exit-status: "+channelForApplication.getExitStatus()+"   >  "); 
              if (channelForApplication.getExitStatus() < 0) {
                System.out.println("Done, but exit status not set!");

            } else if (channelForApplication.getExitStatus() > 0) {
                System.out.println("Done, but with error!");
            } else {
                System.out.println("Done!");
            }
              channelForAverageCPU.disconnect();                
              System.out.println("the channel for av disconnected from init appl");
              channelForApplication.disconnect();
              w.close();
               break;

            }
       }
String fileNameToRead=“fileNameToRead”;
File File=新文件(fileNameToRead);
文件statText=
新文件(目标文件);
FileOutputStream is=新的FileOutputStream(statText);
OutputStreamWriter osw=新的OutputStreamWriter(is);
写入程序w=新的缓冲写入程序(osw);
字符串lastLine=“--检查--”;
InputStream in=channelForApplication.getInputStream();
channelForApplication.connect();
字节[]tmp=新字节[1024];
while(true){
lastLine=getLastLine(file);//获取不断更新文件的最后一行的方法。
w、 写入(最后一行);
w、 写入(“\n”);
而(in.available()>0){
inti=in.read(tmp,0,1024);
System.out.println(新字符串(tmp,0,i));
如果(i 0){
System.out.println(“完成,但有错误!”);
}否则{
System.out.println(“完成!”);
}
channelForAverageCPU.disconnect();
System.out.println(“av与初始应用程序断开的通道”);
channelForApplication.disconnect();
w、 close();
打破
}
}

打开频道的代码在哪里?channel channelForApplication=channelForApplication=session.openChannel(“exec”);((ChannelExec)channelForApplication).setCommand(commandForApplication);channelForApplication.setInputStream(空);((ChannelExec)channelForApplication.setErrStream(System.err);