3 Stimmen

Selbststartprogramm bei Segfault unter Linux

Was wäre unter Linux der beste Weg für ein Programm, sich bei einem Absturz selbst neu zu starten, indem es die Ausnahme in einem Crashhandler abfängt (zum Beispiel bei einem Segfault)?

1voto

Ciarán Punkte 11

Das Programm selbst sollte natürlich nicht prüfen, ob es läuft oder nicht läuft :)

Die meisten Unternehmenslösungen sind eigentlich nur ausgefallene Möglichkeiten, die Ausgabe von ps() nach einer bestimmten Zeichenkette und führt eine Aktion aus, wenn bestimmte Kriterien erfüllt sind - d.h. wenn Ihr Prozess nicht gefunden wird, rufen Sie das Startskript auf.

1voto

enthusiasticgeek Punkte 2542

Versuchen Sie den folgenden Code, wenn er spezifisch für Segfault ist. Dieser kann nach Bedarf geändert werden.

#include <stdio.h> 
#include <signal.h> 
#include <setjmp.h> 
#include <poll.h>

sigjmp_buf buf; 
void handler(int sig) { 
siglongjmp(buf, 1); 
} 
int main() { 
//signal(SIGINT, handler); 
//register all signals
struct sigaction new_action, old_action;
new_action.sa_handler = handler;
sigemptyset (&new_action.sa_mask);
new_action.sa_flags = 0;

sigaction (SIGSEGV, NULL, &old_action);
if (old_action.sa_handler != SIG_IGN)
sigaction (SIGSEGV, &new_action, NULL);

if (!sigsetjmp(buf, 1)){
printf("starting\n"); 
//code or function/method here
}
else{  
printf("restarting\n"); 
 //code or function/method here
}
while(1) {
poll(NULL,0,100); //ideally use usleep or nanosleep. for now using poll() as a timer
printf("processing...\n");
}
return 0; //or exit(SUCESS)
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X