Jemand zu Hause?Leser: 34
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
if ($pid = fork){
#Hier ist der Parent prozeß
# Pid des Child steht in $pid
print "Parentprozess\n";
if (kill 0 => $pid)
{
print "child is alive...\n";
}
sleep 5;
if (kill 0 => $pid)
{
print "child is alive...\n";
}
else
{
print "child is dead...\n";
}
print "ende des ganzen\n";
}
elsif(defined $pid){ # $pid ist hier null falls definiert
# hier gibt es den child prozess
# pid des parent über getppid verfügbar
print "Kindprozess...\n";
sleep 2;
print "Verlasse jetzt Kindprozess\n";
}Quotekill SIGNAL, LIST
Sends a signal to a list of processes. Returns the number of
processes successfully signaled (which is not necessarily the
same as the number actually killed).
2009-08-20T08:41:49 GwenDragonNein, er hat es nur merkwürdig geschrieben.
2009-08-20T08:57:53 GwenDragonDie Schreibweise Schlüssel => Wert bedeutet nichts weiter als ein zusammengehöriges Wertepaar. => ist der Hashoperator.
QuoteIch würde erwarten, dass ich das zweite mal die Ausgabe "child is dead..." bekomme, aber das gegenteil ist der Fall! Ich hoffe ihr könnt mir helfen!
local $SIG{CHLD} = 'IGNORE';
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problemlocal $SIG{CHLD} = 'IGNORE';2009-08-20T13:58:59 sid burnMöchtest du aber das Parent und Child sich Variablen teilen (sharen) dann musst du Threads nutzen.
forks auch hilfreich oder wenn nur Forks benutzt werden würde ich eher zu
Parallel-ForkManager raten, wo man dann auch eingeschränkt Daten senden kann bei der Rückgabe an den Hauptprozess. 2009-08-20T13:58:59 sid burnCoro habe ich selber noch nicht genutzt, werde ich aber definitiv auch mal bald genauer anschauen. Vorallem in verbindung mit AnyEvent: Coro::AnyEvent
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl
use Coro::LWP;
use Coro;
use Coro::AnyEvent;
use Coro::Timer qw(sleep timeout);
use LWP::Simple;
$|++;
my @pids;
for (1..1) {
push @pid, async {
print "starting to fetch http://www.google.de/\n";
get "http://www.google.de/";
print "fetched http://www.google.de/\n";
};
push @pid, async {
print "starting to fetch http://www.yahoo.com/\n";
get "http://www.yahoo.com/";
print "fetched http://www.yahoo.com/\n";
};
}
$_->join for @pid;
WWW-Curl eventuell eine Alternative. Auch einige Fallstricke wie sleep wäre ohne Coro::Timer ein globaler Block.