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
#!/usr/bin/perl use strict; use warnings; use diagnostics; print "Start\n"; my $lauf = 1; while ($lauf) { if (opendir my $vh,'.') { foreach my $file ( grep { $_ =~ /^[a-z0-9]\-auftrag.dat$/ && !-z $_ } readdir $vh ) { print "Datei $file gefunden\n"; my $pid; if (!($pid = fork())) { # Sohn print "Sohn gestartet\n"; sleep(5); } } } print "Warte\n"; sleep(2); } print "Ende\n";
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
Start
Warte
Warte
Warte
Warte
Warte
Warte
Warte
Warte
Warte
Warte
Warte
Warte
Warte
Warte
Datei 1-auftrag.dat gefunden
Warte
Sohn gestartet
Datei 1-auftrag.dat gefunden
Warte
Sohn gestartet
Datei 1-auftrag.dat gefunden
Warte
Sohn gestartet
Warte
Datei 1-auftrag.dat gefunden
Warte
Sohn gestartet
Free to wrong pool 1d05178 not 2f3f18 at test_daemon.pl line 28.
Warte
Warte
Warte
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
#!/usr/bin/perl use strict; use warnings; use diagnostics; print "Start\n"; my $lauf = 1; while ($lauf) { if (opendir my $vh,'.') { foreach my $file ( grep { $_ =~ /^[a-z0-9]\-auftrag.dat$/ && !-z $_ } readdir $vh ) { print "Datei $file gefunden\n"; my $pid; if (!($pid = fork())) { # Sohn rename($file,"$file-erl"); print "Sohn gestartet\n"; sleep(5); } } } print "Warte\n"; sleep(2); } print "Ende\n";
1
2
3
4
5
6
7
8
9
10
11
Start
Datei 1-auftrag.dat gefunden
Warte
Sohn gestartet
Warte
Warte
Warte
Warte
Free to wrong pool 1d6bd50 not 563f18 at test_daemon.pl line 29.
Warte
Warte
2013-09-26T10:11:15 GwenDragonfork existiert unter Windows ja nicht und deswegen werden Kinder threaded gestartet. Ich denke, das Perl Threading samt Garbage Collection klappt nicht korrekt.
2013-09-27T07:26:01 thecoder2012Für Forks würde ich persönlich Parallel::ForkManager nutzen.
2013-09-27T07:26:01 thecoder2012Allgemein würde ich empfehlen auch nicht ständig neue Forks zu starten.
2013-09-27T08:00:00 biancaWürde es schon gern in Perl machen.
Es können fürs Erste maximal 5 Unterschleifen gleichzeitig sein plus der Vater.
Und wenn sich das zu sehr hochschaukelt kann der Vater auch zwischendurch beendet und neu gestartet werden. Wäre kein Problem.
Soll ich denn mal mit Parallel::ForkManager weiter versuchen oder sagt ihr, das macht gar keinen Sinn sondern lieber was anderes?
2013-09-27T07:26:01 thecoder2012
2013-09-27T07:26:01 thecoder2012
2013-09-27T07:26:01 thecoder2012
2013-09-28T06:07:10 biancaHierbei verstehe ich in der Doku nicht, wie/wo man den Code definiert, der ausgeführt werden soll, wenn die definierte Bedingung eingetreten ist.
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
use strict;
use Win32::ChangeNotify;
our $PATH ||= '.';
our $S = defined $S ? 1 : 0;
my $notify = Win32::ChangeNotify->new( $PATH, $S, 'FILE_NAME' );
my %last; @last{ glob $PATH . '/*' } = ();
while( 1 ) {
print('Nothing changed'), next unless $notify->wait( 10_000 ); # Check every 10 seconds
$notify->reset;
print 'Something changed';
my @files = glob $PATH . '/*';
if( @files < scalar keys %last ) {
delete @last{ @files };
print 'These files where deleted: ';
print for keys %last;
}
elsif( @files > scalar keys %last ) {
my %temp;
@temp{ @files } = ();
delete @temp{ keys %last };
print 'These files where created: ';
print for keys %temp;
}
else {
print "A non-deletion or creation change occured";
}
undef %last;
@last{ @files } = ();
}
2013-09-28T06:07:10 biancaWenn ich das richtig verstanden habe bringt mir das nichts. Denn mein Problem liegt nicht in der Verzeichnisüberwachung sondern in der Prozessteuerung.
2013-09-27T07:26:01 thecoder2012Das schaue ich mir jetzt mal genauer an.
use Coro::Timer qw(sleep timeout);
2013-09-26T10:11:15 GwenDragonWarum brauchst du so viele Kindprozesse?
2013-09-27T07:37:04 biancaWarum Sind Prozesse dafür gut?
2013-09-27T07:37:04 biancaWINDOWS ist hierbei zwingend wegen des Kommandozeilenprogramms. Bei der Perl Version bin ich frei.
2013-09-26T11:48:16 GwenDragonUnd was macht du bei deinen Jungs, wenn die zu Zombies werden und der Papi schon tot ist?
2013-09-27T09:55:01 pqscheint dich aber nicht die bohne zu interessieren.
2013-09-26T11:48:16 GwenDragonWürde das Problem sich mit Nutzung von Parallel::ForkManager erledigen?