Как Разрешить Java Обрабатывать Системные Прерывания, Такие Как Ctrl+C

У меня есть программа java, которая создает файл блокировки, чтобы гарантировать, что никакие другие исполнения не выполняются одновременно с ним. Если программа запускается, она создает файл, и при выходе, успешном или через исключение, файл удаляется. Но если пользователь нажимает Ctrl+C, закрывает терминал или каким-либо другим способом прерывает выполнение, файл не удаляется. Есть ли способ, чтобы обнаружить эту команду прерывания, и убедиться, что файл удален в этом случае?

2 ответов


вы можете посмотреть в выключение крючки.

кроме того, это, вероятно, дубликат или почти дубликат этого предыдущего вопроса SO день или два назад:

как я могу "перехватить" Ctrl+C в приложении CLI?


единственный хороший способ справиться с этим-поставить отметку времени в файле журнала и обновлять файл журнала с новой меткой времени каждые несколько секунд. Файл.deleteOnExit поможет, но ни один метод не является надежным (что происходит, когда кто-то просто выдергивает шнур питания?).

Если вы пишете метку времени, то вы можете проверить допустимую метку времени (недавно написанную) и перезаписать файл журнала, если он слишком устарел. Таким образом, устаревший файл блокировки не будет мешать пользователю.