$SIG{CHLD} verhält sich komisch
am 16.08.2006 19:17:06 von doleman
Hallo,
Und zwar folgendes Problem es geht um eine Perl Tk Anwendung. Ich
benutze fork() und SIG{CHLD}:
pipe my ( $reader, $writer );
my $pid =3D fork();
#Kind
if ( $pid == 0 ) {
close $reader;
#ldapsuchanfrage
#erebnisse in hash ablegen
$writer->autoflush(1);
#hash über storable auf $writer
store_fd \%$chld_searchentries, $writer;
print "ergebnisse liegen jetzt vor!!!\n";
POSIX::_exit($pid);
}
#Vater
else {
close $writer;
$SIG{CHLD} =3D sub {
print "sigchld...\n";
#entries über storable von pipe lesen
$searchentries =3D fd_retrieve($reader);
#dann $searchentries auf tk widget ausgeben.....
wait();
};
Es passiert folgendes: Ich starte die Suche sie läuft, die ergebnisse
werden mit store_fd abgelegt, es kommt der Text: "ergebnisse liegen
jetzt vor!!!" und dann sollte eigentlich der SIG{CHLD} kommen tut er
aber nicht nur wenn ich die Mouse bewege oder eine Taste drück
wahrscheinlich irgend ein Event auslöse....
Hat irgend jemand Ahnung voran das liegen könnte bzw. eine idee wie
ich das Problem lösen kann? danke
gruss
Andre
Re: $SIG{CHLD} verhält sich komisch
am 17.08.2006 00:06:07 von Slaven Rezic
"doleman" writes:
> Hallo,
> Und zwar folgendes Problem es geht um eine Perl Tk Anwendung. Ich
> benutze fork() und SIG{CHLD}:
>
> pipe my ( $reader, $writer );
> my $pid = fork();
>
> #Kind
> if ( $pid == 0 ) {
> close $reader;
> #ldapsuchanfrage
> #erebnisse in hash ablegen
> $writer->autoflush(1);
>
> #hash über storable auf $writer
> store_fd \%$chld_searchentries, $writer;
>
> print "ergebnisse liegen jetzt vor!!!\n";
> POSIX::_exit($pid);
> }
> #Vater
> else {
> close $writer;
>
> $SIG{CHLD} = sub {
> print "sigchld...\n";
>
> #entries über storable von pipe lesen
> $searchentries = fd_retrieve($reader);
>
> #dann $searchentries auf tk widget ausgeben.....
> wait();
> };
> Es passiert folgendes: Ich starte die Suche sie läuft, die ergebnisse
> werden mit store_fd abgelegt, es kommt der Text: "ergebnisse liegen
> jetzt vor!!!" und dann sollte eigentlich der SIG{CHLD} kommen tut er
> aber nicht nur wenn ich die Mouse bewege oder eine Taste drück
> wahrscheinlich irgend ein Event auslöse....
> Hat irgend jemand Ahnung voran das liegen könnte bzw. eine idee wie
> ich das Problem lösen kann? danke
Das könnte an "Safe signals" liegen (siehe perldoc perlipc).
Signal-Handler werden erst aufgerufen, wenn ein Perl-Opcode
abgearbeitet wurde. Wenn in der Tk-Applikation nichts passiert, dann
wird auch kein Opcode abgearbeitet. Vielleicht reicht es, wenn du ein
Dummy-Repeat
$mw->repeat(1000, sub { });
laufen lässt. Eventuell musst du etwas in das sub {} schreiben.
Gruß,
Slaven
--
Slaven Rezic - slaven rezic de
sf-upload: make batch releases on SourceForge
http://sf-upload.sf.net
Re: $SIG{CHLD} verhält sich komisch
am 17.08.2006 09:59:40 von doleman
Stimmt, es liegt wohl an den safe-signals.
Ein dummy-repeat reicht, auch leer...:)
Nochmals danke für deine Hilfe ohne dich hät ich das Tool niemals
hingekriegt.....
Es ist zwar noch lange nicht fertig wird aber langsam...
thx
gruss
Andrei
Slaven Rezic schrieb:
> "doleman" writes:
>
> > Hallo,
> > Und zwar folgendes Problem es geht um eine Perl Tk Anwendung. Ich
> > benutze fork() und SIG{CHLD}:
> >
> > pipe my ( $reader, $writer );
> > my $pid =3D fork();
> >
> > #Kind
> > if ( $pid == 0 ) {
> > close $reader;
> > #ldapsuchanfrage
> > #erebnisse in hash ablegen
> > $writer->autoflush(1);
> >
> > #hash über storable auf $writer
> > store_fd \%$chld_searchentries, $writer;
> >
> > print "ergebnisse liegen jetzt vor!!!\n";
> > POSIX::_exit($pid);
> > }
> > #Vater
> > else {
> > close $writer;
> >
> > $SIG{CHLD} =3D sub {
> > print "sigchld...\n";
> >
> > #entries über storable von pipe lesen
> > $searchentries =3D fd_retrieve($reader);
> >
> > #dann $searchentries auf tk widget ausgeben.....
> > wait();
> > };
> > Es passiert folgendes: Ich starte die Suche sie läuft, die ergebnisse
> > werden mit store_fd abgelegt, es kommt der Text: "ergebnisse liegen
> > jetzt vor!!!" und dann sollte eigentlich der SIG{CHLD} kommen tut er
> > aber nicht nur wenn ich die Mouse bewege oder eine Taste drück
> > wahrscheinlich irgend ein Event auslöse....
> > Hat irgend jemand Ahnung voran das liegen könnte bzw. eine idee wie
> > ich das Problem lösen kann? danke
>
> Das könnte an "Safe signals" liegen (siehe perldoc perlipc).
> Signal-Handler werden erst aufgerufen, wenn ein Perl-Opcode
> abgearbeitet wurde. Wenn in der Tk-Applikation nichts passiert, dann
> wird auch kein Opcode abgearbeitet. Vielleicht reicht es, wenn du ein
> Dummy-Repeat
>
> $mw->repeat(1000, sub { });
>
> laufen lässt. Eventuell musst du etwas in das sub {} schreiben.
>
> Gruß,
> Slaven
>
> --
> Slaven Rezic - slaven rezic de
>
> sf-upload: make batch releases on SourceForge
> http://sf-upload.sf.net