2015-03-27 2 views
1

Я искал путь для отправки команды в исполняемую программу Java, но большая часть сообщения предложила реализовать listener или обернуть программу Jetty (или другим сервером)) реализация.Прекрасная работа программы java изящно

Есть ли способ сделать это без добавления дополнительных зависимостей?

Сценарий, у меня есть Java-программа, которая будет работать неограниченно, и которая будет порождать несколько запущенных потоков. Я хотел бы иметь возможность запускать сценарий, чтобы остановить его, когда его нужно закрыть, как это обычно бывает у серверов сценариев выключения. Это позволит мне обрабатывать процесс останова в программе. Программа работает в среде linux.

спасибо.

+0

Вы имеете в виду программно или просто от consle – TameHog

+0

Вы можете использовать 'Socket', чтобы сообщить нам процесс, но это предполагает, что процесс прослушивает или, возможно, записывает значение в определенный файл, который процесс отслеживает ... – MadProgrammer

+4

Этот ответ может помочь: http://stackoverflow.com/a/2922031/2164109 просто реализовать привязку остановки, и всякий раз, когда вы хотите остановить свой процесс, просто используйте сигнал TERM: kill -TERM _java_proccess_id_ – morgano

ответ

1

Реализован крюк выключения, и до сих пор он выглядит хорошо. Коды реализации:

final Thread mainThread = Thread.currentThread(); 
      Runtime.getRuntime().addShutdownHook(new Thread() { 
       public void run() { 
        logger.info("Shut down detected. Setting isRunning to false."); 

        if(processors != null && !processors.isEmpty()){ 
         for (Iterator<IProcessor> iterator = processors.iterator(); iterator.hasNext();) { 
          IProcessor iProcessor = (IProcessor) iterator.next(); 
          iProcessor.setIsRunning(false); 
          try { 
           iProcessor.closeConnection(); 
          } catch (SQLException e1) { 
           logger.error("Error closing connection",e1); 
          } 
         } 
        } 
        try { 
         mainThread.join(); 
        } catch (InterruptedException e) { 
         logger.error("Error while joining mainthread to shutdown hook",e); 
        } 
       } 
      }); 

Спасибо за предложение.

Смежные вопросы