如何获取spring boot应用程序的进程id

时间:2016-11-29 10:56:50

标签: spring-boot pid

我注意到Spring boot在启动过程中在日志中打印了进程ID。现在我想编写一个脚本来使用此pid终止此进程并再次启动应用程序。 Spring Boot是否提供任何api来获取此pid?谢谢!

6 个答案:

答案 0 :(得分:16)

Spring Boot提供类ApplicationPidFileWriter,然后将PID写入文件。您可以通过将其添加为SpringApplication的监听器来激活它:

SpringApplication springApplication = new SpringApplication(DemoApplication.class);
springApplication.addListeners(new ApplicationPidFileWriter());
springApplication.run(args);

ApplicationPidFileWriter的构造函数也可以使用自定义文件名的String或File对象。然后,您可以从该文件中读取PID并在脚本中使用它。

答案 1 :(得分:0)

您可以执行tasklist命令列出活动进程,并显示其标识符(PID)。

您也可以将它们写入脚本中的文件:

tasklist /v txt > filename.txt

之后,您可以使用该脚本读取文件并获取pid。

最终你会使用该脚本来终止进程。

答案 2 :(得分:0)

来自Part V. Spring Boot Actuator: Production-ready features documentation

  

在spring-boot模块中,您可以找到两个类来创建文件   通常对过程监控有用:

     
      
  • ApplicationPidFileWriter创建一个包含应用程序PID的文件   (默认情况下,在文件名为   application.pid)。
  •   
  • WebServerPortFileWriter创建一个文件(或多个文件)   包含正在运行的Web服务器的端口(默认情况下,   应用程序目录,文件名为application.port)。
  •   
     

默认情况下,不会激活这些编写器,但是您可以启用:

     
      
  • 通过扩展配置
  •   
  • 第60.2节“以编程方式”
  •   

这是60.1扩展配置:

  

在META-INF / spring.factories文件中,您可以激活   编写PID文件的侦听器,如以下示例所示:

org.springframework.context.ApplicationListener=\
org.springframework.boot.context.ApplicationPidFileWriter,\
org.springframework.boot.web.context.WebServerPortFileWriter

这将在启动时同时启用pid和端口输出。

因此,想法很简单:在spring boot应用程序的src/main/resources/META-INF文件夹中(如果不存在),创建一个具有先前内容的spring.factories文件,以同时启用(pid或port)或启用以下仅启用PID输出:

org.springframework.context.ApplicationListener=org.springframework.boot.context.ApplicationPidFileWriter

答案 3 :(得分:0)

只需转到/ var / run / {您的应用程序名称} /,读取.pid文件中的pid。

答案 4 :(得分:0)

使用 ApplicationPidFileWriter 是@dunni 已经提到的一种方式。

另一种方法是使用弹簧靴执行器。 actuator/env 将以 json 格式返回所有环境详细信息,例如 port#、PID# 和许多其他系统属性。

http://hostName:port#/actuator/env

要使用这个必须首先在他的应用程序中启用和公开执行器。 步骤:

  1. 在pom中添加actuator-starter依赖
  2. 在属性文件中启用和公开所需的执行器端点。

详情参考:https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-metrics-endpoint

答案 5 :(得分:0)

System.getProperty("PID") 获取 SPRING BOOT PID。

Code

Result