2014-11-05 3 views
-1

Когда запускается инструмент, разработанный на Java, он создает временные файлы в папке. Если они правильно завершены, эти файлы удаляются, но если они завершены с помощью команд kill или pkill, эти файлы не удаляются. Есть ли способ отправить сигнал в java-процесс для удаления этих файлов до завершения процесса? Пожалуйста, помогите мне решить эту проблему. Спасибо в AdvanceJava-процесс при анормальном завершении с помощью Kill или pkill unix comamnds не удаляет временные файлы

+1

'kill -15'? * «Сигнал прекращения действия. Это самый по умолчанию и самый безопасный способ убить процесс». * Не знаю, работает ли это ... – MadProgrammer

+0

Этот вопрос лучше подходит для [Суперпользователя] (http://superuser.com/). – dic19

ответ

0

Вы можете добавить крюк остановки и очистить все, что вам нужно явно.

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

Это на самом деле то же самое, что и java.io.File#deleteOnExit.

+0

Если это то, что делает 'deleteOnExit', как оно должно решить проблему? – Holger

0

Похоже, 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 файл на моей машине.