我使用procrun(特别是prunsrv)将Java应用程序作为Windows服务运行。该服务被定义为exe StartMode,因此批处理文件(run-my-app.bat)作为StartImage运行。为什么我不使用jvm或java模式是一个不同的故事,与此问题无关(我无法使用procrun运行spring boot应用程序,所有示例都不起作用所以我使用创建批处理文件并调用java -jar my 。罐)。 prunsrv.exe实际上是根据应用程序重命名的,例如myapp.exe。问题是如果通过任务管理器杀死了myapp.exe,那么java进程仍然存在!批处理文件run-my-app.bat使用以下行运行应用程序:
start "%APP_NAME%" /b "%JAVA_EXE%" -jar myapp.jar --spring.config.location=application.properties --logging.config=log4j2.xml
批处理文件完成,启动的Java进程仍然存在 - 我知道这一点,因为如果我在上面的"开始"之后打印一条消息命令我在日志中看到了消息。
当prunsrv.exe(重命名为myapp.exe)被杀死时,有没有办法停止java进程?
答案 0 :(得分:0)
子进程只有在创建为Job objects时才会关闭。
恕我直言,它无法告诉prunsrv.exe
将流程作为工作启动,因此您的问题的答案是否。
您当然可以单独终止每个流程。有are attempts来杀死进程树,但要注意Windows不维护父子关系。这意味着:如果在3个进程的链中,中间的进程死亡,则该树不再可用。