Thread Probleme mit fork
(3 answers)
Opened by burnersk at 2008-10-16 19:47
Hallo.
Ich möchte gerade eine kleine ![]() Nun möchte ich, dass bei jedem Verbindungsaufbau ein neuer Prozess geforkt wird, welcher sich dann exklusiv um diese einzige Verbindung kümmert. Siehe Perl-Quelltext 1. Ich habe es schon mit exit, last und kill versucht aber dann den Mutterprozess gekillt. Wie bekomme ich es hin, dass ich bei Verbindungabbruch "# HIER SOLL DER FORK SICH BEENDEN" sich der fork beendet. Code (perl): (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 43 44 45 46 47 48 use sigtrap('handler' => \&SignalHandler, 'HUP', 'TERM'); use sigtrap('handler' => \&ChildExited, 'CHLD', 'PIPE'); use IO::Socket; use constant UXSOCKADDR => '/tmp/ux-sock-uds'; use constant GREETINGS => 'This is ux-server. a reversing ohce!'."\n"; my $childs = {}; # Hash-Referenz mit ProcessIDs der Kindprozesse my $sock = undef; my $conn = undef; sub SignalHandler { my $signal = shift; print('caught signal ', $signal, "\n"); } sub ChildExited { my $chldpid = wait(); print('close fork ', $chldpid, "\n"); delete $childs->{$chldpid}; } unlink(UXSOCKADDR); $sock = IO::Socket::UNIX->new( 'Local' => UXSOCKADDR, 'Type' => SOCK_STREAM, 'Listen' => 5, ) or die('Fehler bei Erstellen des UNIX-Sockets: ', $!); while ($conn = $sock->accept()) { my $pid = fork; if (!defined $pid) { die('Fehler bei fork: ', $!); } else { if ($pid > 0) { $childs->{$pid} = 1; } else { print($conn GREETINGS); while (defined(my $stream = <$conn>)) { chomp($stream); print($conn scalar(reverse($stream)), "\n"); } # HIER SOLL DER FORK SICH BEENDEN } } } |