gpt4 book ai didi

java - 优雅地停止由 maven-antrun-plugin 启动的 java 进程

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:49 24 4
gpt4 key购买 nike

这个问题是昨天对这个问题的回答的结果

run a java application and a web application in a single maven build within a reactor project

所以正如上面问题的回答,我现在有一个 maven-antrun-plugin,它 fork 一个子进程并使用这样的配置运行我的 java appserver -

<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase> verify </phase>
<configuration>
<target>
<property name="runtime_classpath" refid="maven.runtime.classpath" />
<exec executable="java" spawn="true">
<arg value="-classpath"/>
<arg value="${runtime_classpath}"/>
<arg value="somepackage.AppServer"/>
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>

以上配置顺利启动了我的应用服务器作为后台进程。

现在我的问题是是否有一种简单的方法可以找到这个过程并在我通过构建启动它后根据需要停止它。

最佳答案

您可以使用 jps 捆绑在 JDK 中的实用程序,用于获取正在运行的 Java 可执行文件的进程 ID:

The jps tool lists the instrumented HotSpot Java Virtual Machines (JVMs) on the target system. The tool is limited to reporting information on JVMs for which it has the access permissions.

然后,当我们检索到进程 ID 时,我们可以使用 taskkill 终止它。在 Windows 或 kill或 Unix 系统。

这将是 maven-antrun-plugin 的示例配置.它声明 jps可执行文件并在属性 process.pid 中重定向其调用结果与 <redirector> 属性。结果用 <outputfilterchain> 过滤这样只有对应于可执行文件的行 AppServer被存管。 jps输出形式为 [PID] [NAME]所以用 <replacestring> 删除名称;这样,我们只保留 PID。最后,有两个 exec配置取决于操作系统。

<configuration>
<target>
<property name="runtime_classpath" refid="maven.runtime.classpath" />
<exec executable="java" spawn="true">
<arg value="-classpath" />
<arg value="${runtime_classpath}" />
<arg value="somepackage.AppServer" />
</exec>
<exec executable="${JAVA_HOME}/bin/jps">
<arg value="-l" />
<redirector outputproperty="process.pid">
<outputfilterchain>
<linecontains>
<contains value="somepackage.AppServer" />
</linecontains>
<replacestring from=" somepackage.AppServer" />
</outputfilterchain>
</redirector>
</exec>
<exec executable="taskkill" osfamily="winnt">
<arg value="/PID" />
<arg value="${process.pid}" />
</exec>
<exec executable="kill" osfamily="unix">
<arg value="-15" />
<arg value="${process.pid}" />
</exec>
</target>
</configuration>

既然你提到了“优雅”,我就用了-15 Unix 上的选项,不包括 /F Windows 选项。如果想强制退出,可以用kill -9在 Unix 系统上并添加 /F Windows 上的选项。

关于java - 优雅地停止由 maven-antrun-plugin 启动的 java 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35453479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com