Moin, Jörg Roßdeutscher:
Gibt es eine Möglichkeit, einen Segmentation Fault abzufangen?
Peter Wiersig:
man perlipc
Ups, Danke schön. Da war ich schon gewesen, hatte es aber wohl übersehen. Anscheinend ist das aber wohl nur begrenzt brauchbar. Der SegFault tritt während eine PerlMagick-Aufrufs auf. Ich kann ihn dort zwar abfangen, er zieht aber eine nicht endenwollende Kette weiterer SegFaults nach sich und kehrt "nie" wieder in die aufrufende Routine zurück. Der manpage entnehme ich, daß perl nach einem SegFault ohnehin mehr tot als lebendig ist. Kann ich bestätigen. Ich versuche es jetzt anders und fork'e vor dem PerlMagic-Aufruf. Entweder gelingt es, dann beendet sich das Child regulär, oder es gelingt nicht, dann bricht der SegFault das Child ab. Das funktioniert jetzt so halbwegs. Denn dummerweise eine MySQL-Datenbank offen, die das fork'en und abbrechen gar nicht mag. Wie ist das, wenn ich fork'e, während die Datenbank offen ist, und das Child schliesst die Verbindung? Eigentlich müsste sie für den ursprünglichen Prozess weiter offen sein? Das scheint auch zu funktionieren, nur wenn ich mich jetzt zusätzlich im Child dazu entschliesse, die SegFaults jetzt doch wieder abzufangen, um die problematischen Dateien anzuzeigen, dann scheint das gelegentlich im ursprünglichen Prozess die Verbindung zu MySQL zu stören. Anbei mal mein Code, gekürzt: # Erzeugen von Vorschaubildern aus Fonts sub create_image { my $fork_id=fork(); if ($fork_id == 0) { #Child braucht kein MySQL mehr &close_database; # Alle SIGs abfangen foreach my $i (keys(%SIG)) { $SIG{$i} = \&catch_segfault; } # Dieser Befehl crashed bei # defekten Fontfiles: $image->Annotate(x=> 0, y=>40, font=>$filename, pointsize=>40, fill=>'black', text=>'Fontlinge äöüß'); # Also hier evtl. irregulaer beenden # Keine SIGs abfangen foreach my $i (keys(%SIG)) { $SIG{$i} = 'DEFAULT'; } $image->Write("$path$base.png"); # spetestens hier regulaer beenden exit; } elsif (!defined $fork_id) { die "Could not fork\n"; } } Hab ich einen Denkfehler? Gruß, Ratti P.S.: perlipc und perlopentut gelesen. -- http://www.gesindel.de/neu/ | Fontlinge | Die Schriftenverwaltung für LINUX