Как остановить выполнение программы 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();
...
}
Я прав?