Как позволить Java обрабатывать системные прерывания, такие как Ctrl + C - PullRequest
8 голосов
/ 05 августа 2009

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

Ответы [ 2 ]

5 голосов
/ 05 августа 2009

Возможно, вы захотите взглянуть на крюки отключения .

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

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

2 голосов
/ 05 августа 2009

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

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

...