Ich habe ein Java-Programm, das eine Sperrdatei erstellt, um sicherzustellen, dass keine anderen Ausführungen zur gleichen Zeit wie es laufen. Wenn das Programm läuft, wird die Datei erstellt, und beim Beenden, entweder erfolgreich oder durch eine Ausnahme, wird die Datei entfernt. Wenn der Benutzer jedoch Strg+C drückt, das Terminal schließt oder die Ausführung auf andere Weise unterbricht, wird die Datei nicht gelöscht. Gibt es eine Möglichkeit, diesen Unterbrechungsbefehl zu erkennen und sicherzustellen, dass die Datei auch in diesem Fall gelöscht wird?
Antworten
Zu viele Anzeigen?Sie sollten sich vielleicht mit folgenden Themen befassen Abfahrhaken .
Außerdem ist dies wahrscheinlich ein Duplikat oder fast ein Duplikat dieser früheren SO-Frage von vor ein oder zwei Tagen:
Wie kann ich die Tastenkombination Strg+C in einer CLI-Anwendung "abfangen"?
Die einzige Möglichkeit, damit umzugehen, besteht darin, die Protokolldatei mit einem Zeitstempel zu versehen und die Datei alle paar Sekunden mit einem neuen Zeitstempel zu aktualisieren. File.deleteOnExit ist hilfreich, aber keine Methode ist narrensicher (was passiert, wenn jemand einfach das Stromkabel zieht?).
Wenn Sie einen Zeitstempel schreiben, können Sie auf einen gültigen Zeitstempel (kürzlich geschrieben) prüfen und die Protokolldatei überschreiben, wenn sie zu stark veraltet ist. Auf diese Weise wird eine veraltete Sperrdatei dem Benutzer nicht in die Quere kommen.