Когда запускается инструмент, разработанный на Java, он создает временные файлы в папке. Если они правильно завершены, эти файлы удаляются, но если они завершены с помощью команд kill или pkill, эти файлы не удаляются. Есть ли способ отправить сигнал в java-процесс для удаления этих файлов до завершения процесса? Пожалуйста, помогите мне решить эту проблему. Спасибо в AdvanceJava-процесс при анормальном завершении с помощью Kill или pkill unix comamnds не удаляет временные файлы
ответ
Вы можете добавить крюк остановки и очистить все, что вам нужно явно.
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
//put your shutdown code here
}
});
Это на самом деле то же самое, что и java.io.File#deleteOnExit
.
Если это то, что делает 'deleteOnExit', как оно должно решить проблему? – Holger
Похоже, File.deleteOnExit()
является хрупким, когда дело доходит до завершения процесса. Напротив, использование API NIO с 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
, виртуальная машина оставляет файл deleteOnExit
TMP в то время как правильно удаляя deleteOnClose
файл на моей машине.
'kill -15'? * «Сигнал прекращения действия. Это самый по умолчанию и самый безопасный способ убить процесс». * Не знаю, работает ли это ... – MadProgrammer
Этот вопрос лучше подходит для [Суперпользователя] (http://superuser.com/). – dic19