Mailinglist Archive: opensuse-programming-de (151 mails)
| < Previous | Next > |
Re: forken in perl
- From: Gerald Goebel <gerald@xxxxxxxxx>
- Date: Tue, 30 Dec 2003 00:10:27 +0100
- Message-id: <3FF0B463.30705@xxxxxxxxx>
hi ratti, hi Liste,
Joerg Rossdeutscher wrote:
Glaub ich dir ich meinte aber dieses Perl-Buch: Perl-Buch lesen, und C programmieren ;-)
Habe die ganze Zeit "perldoc -f perlfork" versucht,
mit "perldoc perlfork" finde ich es auch.
stimmt, dein Code funktionierte bei mir auch nicht.
Das war gut, beachte Zeitform im letzten Satz von mir.
Deine kid_alive ist das problem:
solang der kid läuft gibt waitpid 0 zurück.
ist kid aber beendet, gibt waitpid die pid des beendeten kid zurück.
bis hierher noch kein problem.
aber hier: ob kid noch läuft oder nicht, er versucht zu schreiben und zu lesen.
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
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";benutzte mal diesen code:
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.
}
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
| < Previous | Next > |