Как работает prunsrv.exe?
Сконфигурировал java-сервис в режиме jvm, следуя инструкциям ( https://joerglenhard.wordpress.com/2012/05/29/build-windows-service-from-java-application-with-procrun/), используя prunsrv.exe, который запускается на окнах, как и ожидалось. Но вопрос в том, как prunsrv.exe останавливается и запускает службу. Я печатаю журналы в файл с идентификатором потока в методах start и stop, как показано ниже.
private static boolean stop = false;
public static void main( String[] args )
{
log.debug(Integer.toHexString(System.identityHashCode(Thread.currentThread())));
if (args.length == 0) {
log.debug("no args provided, give start/stop as argument");
return;
}
String mode = args[0];
if ("start".equals(mode)) {
log.debug("start " + Integer.toHexString(System.identityHashCode(Thread.currentThread())));
startService(args);
} else if ("stop".equals(mode)) {
log.debug("stop " + Integer.toHexString(System.identityHashCode(Thread.currentThread())));
stopService(args);
}
log.debug("End of main " + Integer.toHexString(System.identityHashCode(Thread.currentThread())));
}
Это следующий выходной журнал (запущен и остановлен сервис)
22/Aug/2016 19:22:00,962- App: 441772e
22/Aug/2016 19:22:00,962- App: start 441772e
22/Aug/2016 19:22:00,962- App: startService
22/Aug/2016 19:23:21,259- App: 1ef37254
22/Aug/2016 19:23:21,259- App: stop 1ef37254
22/Aug/2016 19:23:21,259- App: stopService
22/Aug/2016 19:23:21,259- App: End of main 1ef37254
22/Aug/2016 19:23:22,181- App: End of main 441772e
Как мы видим, потоки различны, что означает, что запускается новый процесс для запуска службы и остановки службы. Несмотря на то, что переменная "стоп" является статическим логическим значением, все же они представляют собой разные процессы (верно?). Как это работает?
1 ответ
Может быть.... я не знаю....prunsrv
вызывается основная функция с опцией start
в новом потоке (например, "thread1") и прослушал следующую команду. Когда вы прекращаете обслуживание, prunsrv
вызывается основная функция с опцией stop
в новой теме (например, "thread2"). prunsrv
, thread1
а также thread2
иметь общую память