如何在java中终止特定进程

如何在java中终止特定进程,java,process,Java,Process,大家好,我的java应用程序中有两个进程,如下所示 Process p1=some process; Process p2=some process; 在第一次启动时,它工作正常。但当我重新加载应用程序时,旧进程也在运行,因此我只想在旧进程执行时终止它。我知道我们可以通过使用进程id终止进程。但是我如何获得此p1和p2的进程id。知道吗?在应用程序中捕获重新加载事件并在退出之前终止子进程 如果这不起作用,您的设计中可能有一个bug。尝试修复那个bug。真正地我是认真的 解决方法是将PID写入文

大家好,我的java应用程序中有两个进程,如下所示

Process p1=some process;
Process p2=some process;

在第一次启动时,它工作正常。但当我重新加载应用程序时,旧进程也在运行,因此我只想在旧进程执行时终止它。我知道我们可以通过使用进程id终止进程。但是我如何获得此p1和p2的进程id。知道吗?

在应用程序中捕获重新加载事件并在退出之前终止子进程

如果这不起作用,您的设计中可能有一个bug。尝试修复那个bug。真正地我是认真的

解决方法是将PID写入文本文件。开始时,读取文本文件,检查这是否是正确的过程,然后将其终止


如果没有检查,您可能正在终止由其他人创建的完全有效的进程。我的推理是这样的:重新加载时不能终止进程。这意味着您也不能删除文本文件。因此,PID文件将始终存在。最终,您将终止错误的进程。这将每年发生一次。这将发生在你离职/换了工作/等六个月后的第一次。没有人会理解发生了什么,因为这几乎不可能重现。

正如其他人所说,最好以更自然的方式终止这一过程

但是,如果您确实需要强制终止它,那么只要您不再关心它的运行,就可以调用Process对象上的destroy()方法


另外,您真的需要将代码作为一个进程运行吗?通常有更好的方法。

胡乱猜测,但你不能将ID保存在文本文件、数据库或其他任何地方吗?启动时,查看具有最后一个已知ID的进程是否处于活动状态,如果处于活动状态,则将其杀死,然后重新启动/启动其他进程?在我看来,可能重复的情况可能会导致各种问题。您不能在重新加载之前终止(以某种受控方式)它们吗?但我如何才能获取这些进程的进程id。进程中是否有函数可以获取进程id。如果您想在关闭时终止进程,请使用
p.destroy()
。要获取PID,请将子项包装在将PID写入文件的shell脚本中,或查看以下答案: