【问题标题】:How to uniquely identify a java process after multiple restart多次重启后如何唯一标识一个java进程
【发布时间】:2020-02-18 07:35:09
【问题描述】:

我的机器上运行了多个 java 进程。我需要跟踪每个进程重启了多少次。

例如: 让我们考虑两个java进程 过程 1 - 重新启动 5 次。 进程 2 - 重启了 2 次。

我能够获取正在运行的进程的 PID、java 命令。但是一旦重新启动该过程,我就无法区分。因为重启后PID变了。我也不能考虑 java 命令,因为同一应用程序的两个实例具有相同的命令。

那么跟踪java进程重启的其他方法是什么?

【问题讨论】:

  • 我认为 PID 就是答案。什么定义了您的问题中的现有或新流程?同一个java命令多次运行会产生不同的PID
  • and based on that i will be doing the update/save 是什么意思?
  • 当一个新进程 (java -jar port.jar) 开始时,总是会得到一个新的(随机)PID。没有别的了。我不明白您希望如何更新进程而不是保存。你的问题没有意义。您可以通过向我们提供更多信息来挽救这个问题。请添加更多关于您实际尝试执行的操作的详细信息。否则无解。
  • 对不起,以前我无法清楚地解释我的问题。所以我修改了我的问题。这就是我想问的。

标签: java service process


【解决方案1】:

您希望您的进程在重新启动后保持相同的身份。理想情况下,您应该有一个参数、系统属性或环境变量来告诉进程它的身份。

正如您在问题中所述,此身份无法在命令行上传递。因此,进程必须通过获取专有资源来“找到”自己的身份。

这个资源可能是一个实现锁的共享系统,但它可能很复杂。

作为专有资源,我们有网络套接字。所以你可以让你的进程人为地打开一个套接字,唯一的目标是让它获得一个身份。

您可以使用https://stackoverflow.com/a/116113/2242270 中的代码来打开某个范围内的套接字。进程的身份就是可以打开的端口。

【讨论】:

  • 感谢 lbovet,但我认为这不适用于我的情况。因为我将跟踪我机器中的所有 java 进程。而且我也不会在java进程内部改变任何东西。所以请提出更多的方法。
  • 告诉我们更多关于如何重新启动进程的信息。你有剧本吗?这是我们可以传播身份的地方。
  • 每天在特定时间我的机器都会重新启动。我添加了一些java进程作为服务,启动类型是自动的。所以系统重启后会自动启动。其余的 java 进程我将手动启动。
  • 从上面的案例中我需要跟踪java进程重启了多少次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
相关资源
最近更新 更多