Mehr oder weniger das Thema erklärt die Frage. Ich baue eine Webanwendung mit C++ und Wt. Natürlich versuche ich besonders vorsichtig mit Dingen umzugehen, die einen Segfault verursachen können, aber das könnte passieren. Wt erstellt einen separaten Thread für jeden Benutzer, der eine Sitzung öffnet. Meine schlimmste Befürchtung ist, dass ein böswilliger Benutzer einen Fehler findet, der zum Beispiel einen segfault erzeugt, und es ausnutzt, um die ganze Anwendung zum Absturz zu bringen.C++: Wenn ein segfault oder etwas Ähnliches passiert, gibt es eine Möglichkeit, den einzelnen Thread zu beenden, aber die Anwendung am Laufen zu halten?
Das bevorzugte Verhalten wäre stattdessen, dass ich das Signal "fangen" kann (ja, ich weiß, segfault ist keine Ausnahme, deshalb habe ich die Anführungszeichen verwendet), töte den Thread, der es produziert hat, vielleicht, Wenn möglich, befreie den zugewiesenen Speicher und lasse die Anwendung für die anderen Benutzer laufen.
Ist es möglich?
Danke.
Dies könnte helfen: http://stackoverflow.com/questions/2663456/how-to-write-a-signal-handler-to-catch-sigsegv – tkausl
Versuchen Sie nicht einmal, einen Prozess nach einem kritischen (katastrophales) Versagen, lass es früh sterben. Möglicherweise können Sie Ihre Anwendung jedoch in mehrere Prozesse aufteilen, um kritische Fehler lokal zu vermeiden. –
@ DieterLücking: Danke. Ich weiß, das ist weit davon entfernt, eine perfekte Lösung zu sein, aber ich versuche, das gleiche Verhalten zu erreichen, das ich auf PHP-Servern sehe, wo, wenn etwas schief geht, der Benutzer rausgeschmissen wird, aber der Server geht weiter. Es stimmt, dass dies bei PHP-Servern mit Fehlern zu tun scheint, die in C++ "Compiler-Fehler" sind, aber die Idee, dass ein einzelner Benutzer den gesamten Server zum Absturz bringen kann, ärgert mich zu keinem Ende. Soll ich die Anwendung nach Java verschieben, obwohl sie nur für 1/10 erstellt wird? Würde es bei diesem spezifischen Problem helfen? (Es wäre ein Schmerz, nach Java zu ziehen ... aber ich könnte darüber nachdenken, ob es sich lohnt). – DrHell