我的情况:
在我们的 Java EE 应用程序中有一个分析操作,这个功能是通过使用 java.lang.Runtime 执行一个批处理命令来实现的。最严重的是,这个操作需要很长时间,并且在执行过程中会遇到一些错误,然后整个进程树还活着,这无疑会降低应用程序和服务器的性能。所以我想知道任何人都可以提供一个安全和正确解决这个问题的想法。
而且我知道这是我们开发中非常常见的问题,如果这里提供示例,我将不胜感激。
我的情况:
在我们的 Java EE 应用程序中有一个分析操作,这个功能是通过使用 java.lang.Runtime 执行一个批处理命令来实现的。最严重的是,这个操作需要很长时间,并且在执行过程中会遇到一些错误,然后整个进程树还活着,这无疑会降低应用程序和服务器的性能。所以我想知道任何人都可以提供一个安全和正确解决这个问题的想法。
而且我知道这是我们开发中非常常见的问题,如果这里提供示例,我将不胜感激。
如果您启动应用程序
Process p = Runtime.exec("");
然后你可以打电话给
p.destroy();
除此之外,我认为如果在执行过程中发生任何错误时可以使批处理过程自行销毁,那将是很棒的。有关更多详细信息,请参阅此问题。
见http://commons.apache.org/exec/apidocs/index.html
接口 CommandLauncher 包含几个返回 Process 的 exec 方法。
但无论如何,您无法控制进程 ID:这是操作系统的责任。此外,标准的 java API 甚至不允许您检索进程 ID。在较旧的 java 版本中有一个技巧:Process 的实现包含可以使用反射检索的 int 字段 pid。但这在 1.6 版中有所改变。