Как остановить выполнение программы Java из командной строки?

мое основное поле-.Net, но в последнее время я имею какое-то отношение к Java. Я должен создать утилиту оболочки на Java, которая могла бы работать в фоновом режиме, читая несколько записей базы данных после указанной продолжительности и выполнять дальнейшую обработку. Это своего рода планировщик. Теперь у меня мало забот:

Как сделать это работать как услуга. Я хочу выполнить его через сценарий оболочки, и утилита должна начать работать. Вне курса контроль должен вернуться к вызову скрипт.

во-вторых, в конечном итоге я могу захотеть остановить этот процесс. Как этого достичь?

Я понимаю, что это основной вопрос, но я действительно не знаю, с чего начать и какие варианты лучше для меня.

помощь / посоветуйте пожалуйста?

5 ответов


Я бы пошел на запуск программы с помощью планировщика или службы. Однако, если вы хотите использовать файл bat и сделать это программно, я изложил возможный подход ниже:

в вашей программе Java вы можете получить PID программно, а затем записать его в файл:

public static void writePID(String fileLocation) throws IOException
{
    // Use the engine management bean in java to find out the pid
    // and to write to a file
    if (fileLocation.length() == 0)
    {
        fileLocation = DEFAULT_PID_FILE;
    }       
    String pid = ManagementFactory.getRuntimeMXBean().getName();
    if (pid.indexOf("@") != -1) 
    {
        pid = pid.substring(0, pid.indexOf("@"));
    }                                               
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileLocation));
    writer.write(pid);
    writer.newLine();
    writer.flush();
    writer.close();                     
}

затем вы можете написать остановку .bat файл, который убьет запущенную программу в windows. Вы могли бы сделать что-то вроде:

setlocal
IF EXIST app.pid FOR /F %%i in ('type app.pid') do TASKKILL /F /PID %%i   
IF EXIST app.pid DEL app.pid
endlocal

конечно, приложение.пид файл написано методом Java выше.

Я не уверен, как вы сможете написать сценарий, который запускает программу java, и возвращает контроль при завершении. Мне было бы интересно узнать, есть ли у кого-нибудь решение для этого.


Я предполагаю, что вы играете в свою java-программу с коробкой Linux/Unix. Чтобы запустить приложение как демон, вы можете попробовать

nohup java YourJavaClass &

остановить приложение, вы можете:

kill [psIdofYourApplication]

или

fg [your application job Id]
Ctrl-C

Если вы хотите сделать некоторую постобработку после того, как приложение получает сигнал "убить/остановить". проверьте addShutdownHook (резьбовой крюк)

или солнце.разное.SignalHandler


ps ux

посмотреть pid

kill pid

или вам лучше предоставить сценарий остановки, который сигнализирует приложению, которое делает System.exit(0)


вы не указали платформу. Если в Windows вы должны изучить интеграцию с Service Control для создания службы Windows. http://en.wikipedia.org/wiki/Windows_service. После того, как вы внедрили сервисные крючки, можно запустить и остановить службу через графический интерфейс управления службами или с помощью net stop MyService синтаксис в командной строке.


Как я понимаю, вы хотите что-то вроде этого:

if ( System.in.avaliable() > 0 ) {
  in = new BufferedReader( new InputStreamReader( System.in );
  String InLine = in.readLine();
  ...
}

Я прав?