使用Kill或pkill unix命令异常终止时的Java进程不会删除临时文件

时间:2014-11-05 10:09:36

标签: java kill-process

当启动使用Java开发的工具时,它会在文件夹中创建临时文件。如果正确终止这些文件将被删除,但如果使用kill或pkill命令终止,则这些文件不会被删除。有没有办法在终止进程之前向java进程发送信号以删除这些文件? 请帮我解决这个问题。 在此先感谢

2 个答案:

答案 0 :(得分:0)

您可以添加关闭挂钩并清除所需的所有内容。

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { 
        //put your shutdown code here 
    }
});

这实际上与java.io.File#deleteOnExit为您所做的相同。

答案 1 :(得分:0)

在进程终止时,File.deleteOnExit()似乎很脆弱。相比之下,使用带有StandardOpenOption.DELETE_ON_CLOSE的NIO API似乎更可靠,即使它的规范只说:“如果未调用close方法,那么尽力而为尝试用于在Java虚拟机终止“

时删除该文件

E.g。运行以下程序时:

File f1=File.createTempFile("deleteOnExit", ".tmp");
f1.deleteOnExit();
final Path f2 = Files.createTempFile("deleteOnClose", ".tmp");
FileChannel ch = FileChannel.open(f2, StandardOpenOption.DELETE_ON_CLOSE);
System.out.println(f1);
System.out.println(f2);
LockSupport.parkNanos(Long.MAX_VALUE);
// the following statement is never reached, but it’s here to avoid
// early cleanup of the channel by garbage collector
ch.close();

并在parkNanos挂起时终止进程,JVM会在正确删除计算机上的deleteOnExit文件时保留deleteOnClose tmp文件。