Schrift
[thread]7201[/thread]

Multithread Server mit fork: Childs beenden sich nicht

Leser: 1


<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
kevin
 2005-08-10 17:17
#57106 #57106
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Kann mir irgendjemand sagen, was hier falsch ist???

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/perl

use strict;
use IO::Socket;
use constant MYPORT => 2345;
use POSIX ":sys_wait_h";

#$| = 1;

my $sock = '';
my $client = '';
my ($pid, $PID, $waitpid, );

$sock = new IO::Socket::INET(LocalPort => MYPORT,
Reuse => 1,
Listen => 5) or die "can't create local socket: $@\n";

#sub sigchldHandler {
# $waitpid = wait();
# $SIG{CHLD} = \&sigchldHandler;
#}


#$SIG{CHLD} = \&sigchldHandler;
$SIG{'CHLD'} = sub { wait(); $client ->close; };

print "Accepting connections on Port ", MYPORT, "...\n";


while ($client = $sock->accept()) {
print "Accepted connection from ",
$client->peerhost(), ":", $client->peerport(),;
if (fork() == 0) {
$PID = $$;
print ", PID:$PID\n";
while (<$client>) {
chomp;
print $client scalar(reverse($_)), "\n";
print $client "$PID\n";
}
}
}


Ich habe schon alles mögliche ausprobiert, aber entweder die Childpids bleiben nach der Trennung der Clients weiterbestehen, oder es wird der gesamte Server in den Tod gerissen...


Gruß Kevin
renee
 2005-08-10 17:56
#57107 #57107
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Lies Dir vielleicht mal den Wiki:Artikel durch. Weit unten ist ein Beispiel, wie man mit mehreren Childs umgeht...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
kevin
 2005-08-10 18:34
#57108 #57108
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Naja, wie man mehrere Childs erzeugt und beendet weiß ich auch. Ich will aber einen Child erzeugen, wennsich ein Client über das Netzwerk verbindet. Wenn er sich wieder abmeldet, soll der Child ordnungsgemäß gekillt werden.
Strat
 2005-08-10 18:38
#57109 #57109
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
hilft vielleicht ein exit im child-prozess?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
kevin
 2005-08-10 18:39
#57110 #57110
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Dann ist der gesamter Server pfutsch, bzw wenn noch andere Childs laufen, werden die zu Zombies.
J-jayz-Z
 2005-08-10 18:51
#57111 #57111
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Vielleicht hilft dir das weiter:
http://j-jayz-z.de/perlpage/perl_net.pl#ForkEchoServer
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
Strat
 2005-08-10 18:54
#57112 #57112
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=kevin,10.08.2005, 16:39]Dann ist der gesamter Server pfutsch, bzw wenn noch andere Childs laufen, werden die zu Zombies.[/quote]
ich sprach vom child-prozess, nicht vom parent-prozess... wenn du willst, dass der child prozess beendet wird, dann musst du ihn auch irgendwie beenden, oder etwa nicht?\n\n

<!--EDIT|Strat|1123685790-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2005-08-10 19:17
#57113 #57113
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
da faellt mir noch auf: ein close($client) fehlt auch noch...

und bei sockets ist es IMHO besser, nicht mit <> oder print, sondern mit ->recv oder ->send zu arbeiten... oder immer gut auf die Zeilenendezeichen aufpassen, und dort CRLF oder $CRLF aus dem Modul Socket zu verwenden)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
kevin
 2005-08-11 14:54
#57114 #57114
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Quote
J-jayz-Z 10.08.2005, 16:51


Hab gerade deinen Server getestet, bekomme auch (wie bei meinem Script) mehrere Verbindungen hin.
Aber: Wenn sich ein Client vom Server trennt, bleibt die PID des Childs erhalten!!!
kevin
 2005-08-11 14:55
#57115 #57115
User since
2005-08-10
24 Artikel
BenutzerIn
[default_avatar]
Sorry, im Zitat sollte eigentlich was anderes stehen...
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2005-08-10 17:17.