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?