Java в Linux перезапуск сервиса
Модератор: Absurd
у меня проблемка: хочу чтобы программа перезапустила сама себя, для чего выполняю например ..exec("usr/../restart.sh") но после того как выполнится остановка приложения работа .sh прекращается - у меня такое ощущение что просто все процессы сносяться (в Windows такой проблемы нет при аналогичных действиях)
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Обращаю внимание, что exec в Unix API не идентичен CreateProcess в win32.
Процесс, запущенный через exec вытеснаяет текущий процесс и начинает работать вместо него. Чтобы породить новый процесс, надо вызвать функцию fork(), а уже потом exec().
Процесс, запущенный через exec вытеснаяет текущий процесс и начинает работать вместо него. Чтобы породить новый процесс, надо вызвать функцию fork(), а уже потом exec().
2B OR NOT(2B) = FF
что за fork() - это ведь не из runtime и не process ???Absurd писал(а):Обращаю внимание, что exec в Unix API не идентичен CreateProcess в win32.
Процесс, запущенный через exec вытеснаяет текущий процесс и начинает работать вместо него. Чтобы породить новый процесс, надо вызвать функцию fork(), а уже потом exec().
подскажи плз я в Linux не очень а тут приложение надо писать
new Thread(runnable).start(); так ?
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
А, ты имеешь в виду Java exec()? Извини, перепутал. У меня на работе есть запуск внешних скриптов на шелле из Джавы, завтра кину сюда отрывок._qwe_ писал(а):что за fork() - это ведь не из runtime и не process ???
подскажи плз я в Linux не очень а тут приложение надо писать
2B OR NOT(2B) = FF
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Вроде работает и на Винде, и на Солярисе.
Код: Выделить всё
private boolean isPollingAllowed() {
boolean retVal;
if (nodeStatusUtil != null) {
InputStream stdoutStream = null;
InputStream stderrStream = null;
try {
final Runtime rt = Runtime.getRuntime();
final Process checkingProcess = rt.exec(nodeStatusUtil);
stdoutStream = checkingProcess.getInputStream();
stderrStream = checkingProcess.getErrorStream();
while (stdoutStream.read() != -1) { }
while (stderrStream.read() != -1) { }
int result = checkingProcess.waitFor();
if (result == 0) {
Log.info("Node status check: MASTER");
retVal = true;
} else {
Log.info("Node status check: SLAVE");
retVal = false;
}
} catch (IOException e) {
Log.error("Can't get node status", e);
retVal = false;
} catch (InterruptedException e) {
Log.error("Can't get node status", e);
retVal = false;
} finally {
if (stdoutStream != null) { try { stdoutStream.close(); } catch (Exception e0) { } }
if (stderrStream != null) { try { stderrStream.close(); } catch (Exception e0) { } }
}
} else {
Log.info("Node status check: Not available. Acting as a master");
retVal = true;
}
return retVal;
}
2B OR NOT(2B) = FF