2017-12-26 1 views
0

Ich habe eine Java-Anwendung als Windows-Dienst mit Procrun ausgeführt (speziell prunsrv). Der Dienst ist als exe StartMode definiert, daher wird eine Batchdatei (run-my-app.bat) als StartImage ausgeführt. Warum ich nicht jvm oder java benutze, ist eine andere Geschichte, die nicht mit diesem Problem zusammenhängt (ich konnte keine Spring-Boot-Anwendung mit procrun ausführen, alle Beispiele funktionierten nicht, so dass ich eine Stapeldatei erstellte und java -jar my aufruft .Krug). prunsrv.exe wird tatsächlich entsprechend der Anwendung umbenannt, sagen Sie myapp.exe. Das Problem ist, dass, wenn myapp.exe über den Task-Manager beendet wird, der Java-Prozess bleibt! Die Batchdatei-my-app.bat läuft die Anwendung mit der folgenden Zeile:Prunsrv exe über Task-Manager getötet, aber Child-Prozess bleibt

start "%APP_NAME%" /b "%JAVA_EXE%" -jar myapp.jar --spring.config.location=application.properties --logging.config=log4j2.xml 

Die Batch-Datei abgeschlossen ist und der gestartete Java-Prozess bleibt - das weiß ich, denn wenn ich eine Nachricht nach der oben drucken „Start "Befehl Ich sehe die Nachricht im Protokoll.

Gibt es eine Möglichkeit, den Java-Prozess zu stoppen, wenn die Datei prunsrv.exe (umbenannt myapp.exe) getötet wird?

Antwort

0

Untergeordnete Prozesse werden nur geschlossen, wenn sie als Job objects erstellt wurden.

IMHO ist es nicht möglich zu sagen, prunsrv.exe Prozesse als Jobs zu starten, so ist die Antwort auf Ihre Frage Nein.

Sie können natürlich jeden einzelnen Prozess einzeln beenden. Dort are attempts Prozessbäume zu töten, aber beachten Sie, dass Windows Eltern-Kind-Beziehungen nicht unterhält. Das heißt: Wenn in einer Kette von 3 Prozessen der mittlere stirbt, ist der Baum nicht mehr verfügbar.