How To Let Java Handle System Interrupts Like Ctrl+C

纵然是瞬间 提交于 2019-12-23 07:49:28

问题


I have a java program which creates a lock file to ensure that no other executions run at the same time as it. If the program runs it creates the file, and upon exit, either successful or via an exception, the file is removed. But if the user hits Ctrl+C, closes the terminal, or in some other way interrupts execution, the file is not deleted. Is there any way to detect this interrupt command and ensure that the file is deleted in this case as well?


回答1:


You might want to look into shutdown hooks.

Also, this is probably a duplicate or near-duplicate of this previous SO question from a day or two ago:

How can I "intercept" Ctrl+C in a CLI application?




回答2:


The only good way to deal with this is to timestamp your log file, and update the logfile with a new timestamp every few seconds. File.deleteOnExit will help, but no method is foolproof (what happens when someone just pulls the power cord?).

If you write a timestamp, then you can check for a valid timestamp (recently written) and overwrite the log file if it is too badly out of date. That way a stale lockfile won't get in the way of the user.



来源:https://stackoverflow.com/questions/1229763/how-to-let-java-handle-system-interrupts-like-ctrlc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!