У меня есть приложение с двумя кнопками для запуска и остановки выполнения команды JSch. Так что я следующий метод, который вызывает, когда мы нажали на кнопку пуска:Выполнение команды прерывания JSch
public String executeSSHCommand(String pattern, String listFiles) {
searchRez = new StringBuilder();
BufferedReader br = null;
String line, cmd = null;
// adding ' symbol to pattern
pattern = "'"+pattern+"'";
//
try {
Channel channel = session.openChannel("exec");
cmd = "zgrep " + pattern + " " + listFiles;
log.debug("Executing next ssh command: " + cmd);
((ChannelExec)channel).setCommand(cmd);
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream in=channel.getInputStream();
channel.connect();
// read server output
br = new BufferedReader(new InputStreamReader(in));
while(true && !isCancel){
while ((line = br.readLine()) != null && !isCancel) {
searchRez.append(line+"\n");
}
if(channel.isClosed()){
log.debug("Exit status for execute ssh command is " + channel.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){log.error(ee);}
}
if (isCancel) {
log.debug("Search was canceled by user... ");
channel.setInputStream(null);
if (in != null) {
in.close();
in = null;
}
if (br != null) {
br.close();
br = null;
}
try{Thread.sleep(1000);}catch(Exception ee){log.error(ee);}
}
//
channel.disconnect();
session.disconnect();
log.debug("Search pattern in log file is complete.");
} catch (Exception ex) {
log.error(ex);
}
log.debug("Rezult string has next value: " + searchRez.toString());
return searchRez.toString();
}
Как вы можете видеть выше, мы имеем isCancel переменной, это логическое летучий переменная, мы задаем ложным, когда нажмите на кнопку остановки. Поэтому моя проблема заключается в том, когда пользователь нажимает кнопку остановки и канал с сеансами отключается, zgrep выражение продолжает работу на сервере. Я думал, что channel.disconnect() должен остановить все мои запущенные команды на сервере, может кто-нибудь, пожалуйста, сообщите, как исправить это. Благодарю.
+1 Но, пожалуйста, добавьте код, который решить вашу проблему, поэтому в случае связь отбросил ваш ответ по-прежнему. Кроме того, будущим посетителям не придется искать внешние источники, чтобы найти ответ. – dic19