0

我有一个使用 procrun(特别是 prunsrv)作为 Windows 服务运行的 Java 应用程序。该服务定义为 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 进程?

4

1 回答 1

0

子进程只有在创建为Job 对象时才会关闭。

恕我直言,无法将prunsrv.exe流程作为作业启动,因此您的问题的答案是No

您当然可以单独终止每个进程。有人尝试杀死进程树,但请注意 Windows 不维护父子关系。这意味着:如果在一连串的 3 个进程中,中间一个死掉了,那么这棵树就不再可用了。

于 2017-12-26T10:16:37.397 回答