我正在使用纯 Java 的“blackBox”处理图像,表示为:
imageOut = imageProcess(imageIn);
这是一个循环:
for (int i = 0; i < 1000; i++) {
imageOut[i] = imageProcess(imageIn[i]);
}
几乎所有进程都会在 2-5 秒内终止,但少数(可能是 2%)运行了很多分钟,有些似乎没有终止(我不知道为什么)。我想在(比如)30 秒后终止这些,记录病理图像,然后转到下一个。 blackBox 没有 i/o,也无法嵌入 Thread.isInterrupted()
等
我可以在 30 秒后使用 Thread.stop()
终止进程吗?如果是这样,我该怎么做? [我意识到它已被弃用,但我找不到其他方法。] 或者有没有更好的方法来解决这个问题,而不修改 imageProcess()
?
本质上,我想将其作为过滤器运行:“拒绝所有处理时间超过 30 秒的图像”。
更新:
跟随 Peter Lawrey,我正在探索 ProcessBuilder
。
他为 Java >=1.8 发布了一个简单的解决方案,我已经接受了。由于我目前使用的是 Java 1.7,因此我发布了我自己的答案,该答案适用于早期版本中的一个简单案例。
最佳答案
最好的选择是使用 ProcessBuilder 启动一个新流程。当此进程超时时,您可以对其调用 destroy()
并知道所有资源都将被清理。 (临时文件除外)
关于java - 在循环中杀死一个非终止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294727/