Prunsrv exe通过任务管理器被杀死,但子进程仍然存在

问题描述 投票:0回答:1

我有一个Java应用程序使用procrun(特别是prunsrv)作为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进程仍然存在 - 我知道这一点,因为如果我在上面的“start”命令之后打印一条消息,我会在日志中看到该消息。

当prunsrv.exe(重命名为myapp.exe)被杀死时,有没有办法停止java进程?

java spring windows batch-file procrun
1个回答
0
投票

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

恕我直言,不可能告诉prunsrv.exe启动流程作为工作,所以你的问题的答案是否定的。

您当然可以单独终止每个进程。有are attempts来杀死进程树,但要注意Windows不维护父子关系。这意味着:如果在3个进程的链中,中间的进程死亡,则树不再可用。

© www.soinside.com 2019 - 2024. All rights reserved.