2016-08-22 6 views
0

Konfiguriert einen jvm-Modus Java-Dienst nach dem Tutorial (https://joerglenhard.wordpress.com/2012/05/29/build-windows-service-from-java-application-with-procrun/) mit der prunsrv.exe, die auf Windows wie erwartet ausgeführt wird. Aber die Frage ist, wie die prunsrv.exe den Dienst stoppt und startet. Ich drucke die Protokolle in der Datei mit der Thread-ID in den Start-und Stopp-Methoden wie folgt.Wie funktioniert die 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()))); 
    } 

Dies wird die folgende Ausgabe log (gestartet und gestoppt, um den Dienst)

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 

Da wir die Gewinde unterschiedlich sind zu sehen, was bedeutet, ein neues Verfahren zur Start-Dienst gestartet wird und Dienst beenden. Auch wenn die Variable "stop" ein statischer Boolescher Wert ist, sind sie doch unterschiedliche Prozesse (Richtig?). Wie funktioniert das?

Antwort

0

Vielleicht .... Ich weiß nicht .... prunsrv aufgerufen Hauptfunktion mit Option start in neuen Thread ("Thread1" zum Beispiel), und hörte nächsten Befehl. Wenn Sie den Service stoppen, wird die prunsrv Hauptfunktion mit der Option stop im neuen Thread aufgerufen (zum Beispiel "thread2"). prunsrv, und thread2 haben gemeinsamen Speicher.