2013-11-15 6 views
2

У меня есть приложение Java, работающее на сервере linux. Когда он был запущен, он записывал идентификатор процесса в «pidfile».Есть ли способ закрыть приложение Java по идентификатору процесса?

Когда я закрываю, я просто прочитал ИДП из этого файла, и убить его:

kill -9 12345 

Но другие люди говорят, что это не безопасно, вместо этого, они предлагают мне встроить небольшой сервер HTTP, и обеспечить HTTP API для закрытия, такие как:

http://localhost:8080/close 

Когда я хочу, чтобы закрыть его, мне нужно посетить:

curl http://localhost:8080/close 

Это работает, но очень скучно, я по-прежнему предпочитаю путь к процессу. Есть ли способ использовать идентификатор процесса для безопасного закрытия приложения?


Update:

«Безопасно» здесь я имею в виду, я могу отменить некоторые запущенные задачи, которые могут писать файлы на диск и закрыть некоторые ресурсы перед выходом.

+2

Зависит от того, что вы подразумеваете под безопасностью? Я думаю, что «люди» говорят, что позволить процессу Java очищать и закрывать ресурсы, но если это не относится к вам, тогда не беспокойтесь (хотя «kill -HUP» может быть немного приятнее ...) –

+0

@ AndersR.Bystrup Спасибо, я только что обновил свой вопрос – Freewind

ответ

1

Вы можете закрыть его, выполнив убить -HUP ProcessId

Если есть необходимость корректно завершить работу, зарегистрировать выключение крючок и выполнить все необходимые доработки там.

Более подробную информацию здесь Runtime.addShutdownHook

P.S: На мой взгляд, не встраивать веб-сервер только для этой цели, если вы на самом деле не нужно. И если вы используете веб-сервер, вам также нужно подумать о безопасности - любой, кто знает URL-адрес, может удаленно закрыть ваше приложение :)

+0

Крюки выключения обсуждались в соответствующем посте: http://stackoverflow.com/questions/191215/how-to-stop-java-process-gracefully –

+0

Я вижу некоторые документы скажем, что 'kill -HUP' означает перезапуск приложения. Но я не хочу, чтобы он «перезапускался», просто закрыл его. Я что-то не понимаю? – Freewind

+1

Приложение может делать произвольные действия как реакция на сигнал, который не сразу его удаляет. HUP означает «зависание», то есть соединение с пользователем теряется. Это обычно приводит к изящному завершению. Сигналы объясняются здесь: http://en.wikipedia.org/wiki/Unix_signal –

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