Graceful Handling von Segfault

8

Ich schreibe ein Programm in Python, das eine Closed-Source-API in Linux verwendet. Die API funktioniert manchmal, und manchmal segfolds - Absturz auch mein Programm. Wenn das Programm jedoch für 10 Sekunden ausgeführt wird, ist es über den Punkt hinaus, an dem es segfaulting sein kann und für immer ausgeführt wird (Fehler treten nur am Anfang auf).

Ich denke, ich brauche eine Art von Skript, die:

  

startet mein Python-Programm,

     

wartet 10 Sekunden,

     

überprüft, ob python noch läuft

     

Wenn es läuft, sollte das Skript sich selbst beenden, ohne python zu beenden

     

Wenn Python NICHT läuft, wiederhole.

Ist ein solches Programm möglich? Wird ein segfault das Skript auch beenden?

    
bkanuka 19.04.2011, 00:38
quelle

2 Antworten

2

Ja, solch ein Programm ist perfekt möglich. Sie müssen diese beiden Programme nur in separaten Prozessen ausführen - SEGFAULT beendet nur den Prozess, in dem es aufgetreten ist.

Wenn Sie unter Linux sind, können Sie entweder bash oder python verwenden, wenn Sie möchten. Starten Sie einfach das Skript, das in einem separaten Prozess fehlschlägt. Code in Python könnte ähnlich aussehen:

%Vor%

Vielleicht hat ein Rückgabecode von einem solchen Prozess auch einen bedeutungsvollen Wert, wenn er wegen SEGFAULT beendet wurde.

    
pajton 19.04.2011, 00:43
quelle
1

Können Sie die Aufrufe dieser fehlerhaften API innerhalb eines untergeordneten Prozesses isolieren? Auf diese Weise können Sie den Beendigungsstatus überprüfen und Abstürze innerhalb eines Try ... Catch

behandeln     
Sean 19.04.2011 00:42
quelle