- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
if( str.substring(0,3).equals("110")){
//restarting client
c.close();
Thread.sleep(100);
main(args);
System.gc();
System.exit(1);
}
а вообще рестарт реализуется так:
1. нужен бутстраппер, пусть даже примитивный батник, но лучше на сях каких
2. делаем корректно выход (не убиваем всю виртуальную машину exit'ом), то есть грамотно дожидаемся завершения всех потоков, пишем наружу что хотим не выход а рестарт
3. бутстраппер ждет завершения явы, и смотрит выход, и если от явапроги пришло желание еще раз запуститься, запускает еще раз, если нет, умирает сам
а вообще да -- ничто не мешает запустить процес
дождаться кода возврата
и если он не нулевой -- перезапустить процесс
я такой бутстраппер-батник сделать могу))
батники очень полезны в качестве запускалок-по-двойному-щелчку, недостатка два:
1.тока в выньде
2.пока ява жива, видна черная консоль, только мешающая юзверам, сбивающая с толку и искушающая нажать на правый верхний крест.
2) cmd /C javaw же
Его программа sendmail запускала сама себя для разных задач, за что и была признана говнокодской)
да и сендмэйл как бы говно не потому что форкается (на *нихах это ОК) а потому что у него конфиг файл который вошел в историю как самая большая ошибка программирования. (и нет, виндам до славы кошмаров настраивания сендмыл.сф еще далеко.)
.cf файлы руками обычно не правят (хотя с ориелливской книжкой впринципе это возможно), хотя и .mc файлы не очень-то прозрачны для понимания))
это ничего не меняет. если программа уже есть в памяти, то с диска почти ничего читаться не будет - будут использоваться уже загруженые сегменты. если линух под рукой есть, сделай в шеле `cat /proc/$$/maps` для примера.
значит мысль иметь один бинарник не так уж и плоха.
правда это умильно выглядет при портировании
что-то подсказывает мне, что не все платформы ведут себя точно так же.