Am Sunday 28 December 2003 13:28 schrieb Bernhard Walle: [...Code von Berhard...] Sehr gut, das habe ich jetzt selber ausprobiert (Das Ergebnis hätte ich nicht erwartet;( ).
In Java sollte es bis auf nativen Code (s.o.) keine Speicherzugriffs- fehler geben, weil die Sprache und die JVM so designed wurden, dass man keine Low-Level-Speicheroperationen durchführen kann. In reinem Perl kann man auch keine Speicherzugriffsfehler produzieren, Ratti verwendet aber eine Bibliothek, die auf C(/C++)-Code zurückgreift.
Startet man in perl z.B . mit system() einen anderen Prozess, wenn der neue Prozess nun mit segfault wegbricht, sollte der Aufrufer korrekt weiterarbeiten. Dachte bislang, das ein SEGV nur den aktuellen Prozess killt, auch bei fork(). Anscheinend gibt es gravierende Unterschiede ob man direkt fork() benutzt anstatt system() oder exec(). In der PerlBibel steht auch, das system() & Co. mehr "arbeitet" als fork()! Wenn man mit fork arbeitet sollte wait/waitpid benutzt werden, ausserdem muss man sich selber um das aufräumen der Zombies kümmern. Es gibt vielleicht die Möglichkeit seine Prozessgruppen Nummer zu ändern damit die Childs so nicht mehr wirklich zu dem Parentprozess gehören. In der Bibel steht das allerdings in Zusammenhang, wenn man SIgnale senden möchte. Auszug: "Selbst wenn diese Prozesse eigene Child-Prozesse anstossen, findet ein HUB Signal an die Prozessgruppe sie alle (ausser denen, die Ihre eigenen Prozessgruppen gesetzt haben, um sich selbst diplomatische Immunität gegenüber Ihren Signalen zu verschaffen)." Irgendwie hört sich das interessant und verbiegbar an :) Das sind bislang meine Erfahrungen zu diesem Thema... Vielleicht ist es die einfachste Möglichkeit, das Programm in zwei Teile zu trennen, ob das schön ist lasse ich jetzt mal dahingestellt. (Mit system()) Ich denke aber das Ratti trotzalledem mal eval() ausprobieren sollte, die Sache mit dem Pragma hört sich im Buch auch sehr nett an. Obwohl mich diese Diskussion sehr daran zweifeln lässt, das das funktioniert ;( Leider habe ich keine Ahnung von Fonts, deshalb ist folgenden Aussage mit vorsicht zu geniessen. IMHO würde der ganze Kram nicht anfallen, wenn man den Font korrekt überprüfen könnte und damit den segfault vermeidet. (Bitte nicht lachen) Ratti schreibt, das er den Font an freetype übergibt. Wie/womit machst er das? C in Perl? Ein Modul das in C geschrieben ist? Ciao Andre