Leser: 18
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
#!/usr/bin/perl
use WWW::Mechanize;
open (FILE,"/tmp/ip-listing.txt")
while(<FILE>)
{
chomp;
$SIG{CHLD} = 'IGNORE'; # Zombies verhindern
my $pid = fork();
if ($pid == 0)
{
&UNTER ($_);
exit;
}
}
close (FILE);
sub UNTER
{
$ip = shift;
my $browser = WWW::Mechanize->new( autocheck => 1, timeout => 5 );
$browser->get( "http://$ip/index.html" );
}
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
#!/usr/bin/perl use strict; use warnings; # exportiert (unter anderem) die funktion: WNOHANG use POSIX ':sys_wait_h'; # Signalhanler einrichten # Die hier gespeicherte Funktionsreferenz wird aufgerufen, # wenn ein kindprozess Kindpozess beendet wurde $SIG{CHLD}=\&on_sig_child; # drei Prozesse erzeugen for(0..2) { create_child(); sleep 1; } # ein Prozess erzeugen den wir "killen" werden: my $killpid=create_child(); sleep 1; # prozess hart beeneden: kill(9, $killpid) if($killpid); # so lange Schleifendurchlauf wie noch KindProzesse laufen; sleep 1 while(waitpid(-1,WNOHANG())!= -1); exit(); ################## ### Funktionen ######################################################### ################## # Kindprozess erzeugen sub create_child { # KindProzess erzeugen, # indem der eigenen Prozess dubliziert wird. my $pid=fork; # wenn pid definiert und != 0 # wir sind im Elternprozess if($pid) { print "CREATE CHILD($pid)\n"; } # pid definiert und 0 # wir sinb im Kindprozess elsif(defined($pid)) { $SIG{CHLD}='IGNORE'; child_working(); } # pid nicht definiert # ein Fehler ist aufgetreten else { warn "fork faild ($!)\n"; } return $pid; } # der SignalHandler sub on_sig_child { # Welcher KindProzess wurde beendet? my $pid=wait(); # Eine Meldung machen: print "EXIT CHILD: $pid\n"; # Der Wert der mit "exit" zurück geliefert wurde print " CODE: ".($?>>8)."\n"; # Wie wurde der Prozess bendet 0=ohne externes Signal; # Andere Werte siehe "man signal" print " SIGNAL: ".($?&127)."\n"; } sub child_working { # ein wenig schlafen sleep(7); # einen zufällgen Exitstatus zwishen 0 und 4 erzeugen my $exitstatus=int(rand(5)); print "Child($$) exit($exitstatus)\n"; exit($exitstatus); }