Как работает prunsrv.exe?

Настроил службу Java в режиме jvm, следуя руководству (https://joerglenhard.wordpress.com/2012/05/29/build-windows-service-from-java-application-with-procrun/), используя prunsrv.exe, который работает в Windows как и ожидалось. Но вопрос в том, как prunsrv.exe останавливает и запускает службу. Я печатаю журналы в файл с идентификатором потока в методах запуска и остановки, как показано ниже.

 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

Как мы видим, потоки разные, что означает, что новый процесс запускается для запуска службы и остановки службы. Несмотря на то, что переменная «стоп» является статическим логическим значением, все же это разные процессы (правильно?). Как это работает?


person Talespin_Kit    schedule 22.08.2016    source источник


Ответы (1)


Возможно....я не знаю....prunsrv вызвал основную функцию с опцией start в новом потоке (например, "thread1") и прослушал следующую команду. Когда вы останавливаете службу, prunsrv вызывает основную функцию с опцией stop в новом потоке (например, "thread2"). prunsrv, thread1 и thread2 имеют общую память.

person scientistnik    schedule 23.09.2016