hi ratti, hi Liste, Joerg Rossdeutscher wrote:
Am Mo, den 29.12.2003 schrieb Gerald Goebel um 22:01:
Bernhard Walle wrote:
Aber irgendwie ist das jetzt eine gute Gelegenheit, mal etwas C ins Spiel zu bringen *Perl-Buch rauskram* *les* *etwas später*
Kannst du diese Perl-Buch nicht mal ratti leihen?
:-) Ich habe wahrlich Doku ohne Ende, das Netz ist voll, Bücher habe ich auch. Ich habe einen Denkfehler.
Glaub ich dir ich meinte aber dieses Perl-Buch: Perl-Buch lesen, und C programmieren ;-)
perldoc ist der Befehl: # perldoc perlipc # perldoc perlfork
...oder online und ordentlich formatiert unter www.perldoc.com
Habe die ganze Zeit "perldoc -f perlfork" versucht, mit "perldoc perlfork" finde ich es auch.
kann es sein das ratti ein perl benutzt welches die emulation benutzt und deshalb diese Probleme hat?
@ratti: wenn du einen testcode hat, der bei dir nicht läuft, poste ihn bitte hier, denn mit scheint das du ein verkonfiguriertes Perl hast.
Glaube ich nicht.
stimmt, dein Code funktionierte bei mir auch nicht.
Code anbei. Was der Code tun SOLL ist:
Das war gut, beachte Zeitform im letzten Satz von mir.
Aber, was wirklich passiert: Der erste "Absturz" gibt ein "e" aus (korrekt) und beendet dann sofort Child und Parent (Hä?).
Deine kid_alive ist das problem:
sub kid_alive { my $pid=shift; if (! defined $pid ) { return 0; } # Undefined pid: Never forked before
my $kid = waitpid( $pid , WNOHANG);
solang der kid läuft gibt waitpid 0 zurück. ist kid aber beendet, gibt waitpid die pid des beendeten kid zurück.
if ( $kid == -1 ) { return 0; } # No such process
bis hierher noch kein problem.
# Found a(!) process. Is it the right one?
aber hier: ob kid noch läuft oder nicht, er versucht zu schreiben und zu lesen.
print CHILD "HELLO\n"; chomp(my $line = <CHILD>); if ( $line eq "SMACK" ) { return -1; } # Kid's alive and replies
return 0; # Uh. Rang the wrong door, or kid's dead. } benutzte mal diesen code:
sub kid_alive { my $pid=shift; if (! defined $pid ) { return 0; } # Undefined pid: Never forked before my $kid = waitpid( $pid , WNOHANG); if ($kid == 0 ){ print CHILD "HELLO\n"; chomp(my $line = <CHILD>); if ( $line eq "SMACK" ) { return -1; } # Kid's alive and replies } return 0; } hth cu Gerald