Когда инструмент, разработанный на Java, запускается, он создает временные файлы в папке. При правильном завершении эти файлы удаляются, но при завершении с помощью команд kill или pkill эти файлы не удаляются. Есть ли способ отправить сигнал процессу java для удаления этих файлов перед завершением процесса? Пожалуйста, помогите мне решить эту проблему. Заранее спасибо
Процесс Java при аварийном завершении с помощью команд Unix Kill или pkill не удаляет временные файлы
Ответы (2)
Вы можете добавить хук выключения и явно очистить все, что вам нужно.
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
//put your shutdown code here
}
});
На самом деле это то же самое, что java.io.File#deleteOnExit
делает для вас.
person
avarabyeu
schedule
05.11.2014
Если это то же самое, что делает
deleteOnExit
, как он должен решить проблему?
- person Holger; 05.11.2014
Кажется, что File.deleteOnExit()
хрупок, когда дело доходит до завершения процесса. В отличие от этого, использование NIO API с StandardOpenOption.DELETE_ON_CLOSE
кажется более надежным, даже несмотря на то, что его спецификация говорит только: «Если метод close
не вызывается, тогда предпринимается максимальная попытка удалить файл, когда Виртуальная машина Java завершает работу»
Например. при запуске следующей программы:
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
tmp, правильно удаляя файл deleteOnClose
на моей машине.
person
Holger
schedule
05.11.2014
kill -15
? Сигнал завершения. Это стандартный и самый безопасный способ завершить процесс. Не знаю, работает ли он... - person MadProgrammer   schedule 05.11.2014