C: Etwas tun, wenn das Programm beendet wird

8

Wenn in C meine Anwendung unerwartet beendet wird, kann ich vorher eine Funktion aufrufen? Ich schreibe ein Flag in eine Datenbank (processRunning = 1), das verhindert, dass andere Anwendungen einen ähnlichen Prozess starten. Wenn die Anwendung beendet wird, ändert sich das Flag nicht mehr.

    
Frank Vilea 21.05.2011, 14:05
quelle

4 Antworten

6

Schauen Sie in die atexit API der C-Standardbibliothek.

    
Constantinius 21.05.2011, 14:06
quelle
5

Unter POSIX ist es die richtige Lösung, die Daten mit einem robusten Mutex im Shared Memory zu schützen. Wenn Ihr Prozess mit einem stabilen Mutex abgestürzt ist, wird ein anderes Programm, das versucht, den Mutex zu sperren, nicht deadlockt, sondern stattdessen EOWNERDEAD zurückgeben, und dann hat es die Möglichkeit, den durch den Mutex geschützten Zustand zu bereinigen und pthread_mutex_consistent aufzurufen.

Bearbeiten: Wenn Sie nur verhindern möchten, dass mehrere Instanzen des Programms ausgeführt werden, gibt es sicherlich bessere / einfachere Methoden, wie das Sperren der Datenbankdatei.

    
R.. 21.05.2011 14:51
quelle
4

Wenn Ihre Anwendung normal beendet wird, werden Funktionen ausgeführt, die über atexit registriert wurden. Dies ist eine Standardfunktion, die auf Windows , unix und jede andere Plattform, und auch in C ++ .

Beachten Sie, dass "normal beendet" bedeutet, dass Sie Aufrufe von exit() ausführen oder von main() zurückkehren. Wenn Ihre Anwendung über abort() oder _exit() beendet wird, oder wenn sie von außen vollständig gelöscht wird, hat sie möglicherweise keine Möglichkeit, eine Bereinigung durchzuführen. Es kann einen besseren Ansatz geben, möglicherweise das Setzen und Löschen des Flags in einem Wrapper-Programm, das die Bereinigung durchführt, unabhängig davon, wie Ihr Programm beendet wird, oder ohne diese Markierung zu verwenden.

    
Gilles 21.05.2011 14:12
quelle
2

Es gibt bessere Möglichkeiten, zu verhindern, dass die Anwendung zweimal ausgeführt wird. Eine Lösung besteht darin, benannte Mutexe systemweit zu verwenden. Eine andere und vielleicht einfachere Lösung ist das Sperren einer Datei (zum Schreiben geöffnet). Selbst wenn die Anwendung abstürzt, werden Ressourcen vom Betriebssystem freigegeben und Sie können die Anwendung erneut starten, da die Datei oder der Mutex nicht mehr gesperrt werden.

    
Juraj Blaho 21.05.2011 14:22
quelle

Tags und Links