Jemand zu Hause?
Win32::Process::Create()? Ich habe daran meine Zweifel, weil ich das schon mal in einem Script gemacht habe und ein ganz frischer Test von heute hat ergeben, dass das Elternscript auf das Kindscript gewartet hat, was ja nicht sein soll.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
use strict;
if(my $pid = fork()) {
for (0..5) {
print "original: " . $_ . "\n";
sleep(1);
}
}
else {
for (0..10) {
print "forked: " . $_ . "\n";
sleep(1);
}
}
print "exiting\n";
exit;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
jan@jlubuntu ~/www/test/forktest $ perl fork.pl
original: 0
forked: 0
original: 1
forked: 1
original: 2
forked: 2
original: 3
forked: 3
original: 4
forked: 4
original: 5
forked: 5
exiting
forked: 6
jan@jlubuntu ~/www/test/forktest $ forked: 7
forked: 8
forked: 9
forked: 10
exiting
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl
use strict;
system("./2.pl &");
for (0..5) {
print "1: " . $_ . "\n";
sleep(1);
}
print "exiting\n";
exit;
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl
use strict;
for (0..10) {
print "2: " . $_ . "\n";
sleep(1);
}
print "exiting\n";
exit;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
jan@jlubuntu ~/www/test/forktest $ perl 1.pl
jan@jlubuntu ~/www/test/forktest $ perl 1.pl
1: 0
2: 0
1: 1
2: 1
1: 2
2: 2
1: 3
2: 3
1: 4
2: 4
1: 5
2: 5
exiting
jan@jlubuntu ~/www/test/forktest $ 2: 6
2: 7
2: 8
2: 9
2: 10
exiting
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!/usr/bin/perl use strict; use warnings; use diagnostics; use Fcntl qw(:DEFAULT :flock); my $pid; if ($pid = fork()) { # Eltern brauchen wir nicht mehr print STDOUT 'Laeuft...'; exit(); } else { # Kind muss arbeiten sleep(10); sysopen(my $fh,'test_fork_sohn.txt',O_WRONLY|O_APPEND|O_CREAT); print $fh 'hier bin ich nach 10 Sekunden'; exit(); }
2013-11-01T10:59:49 janUnter welchem Linux hast Du's probiert?
1
2
3
4
5
6
REQ>lsb_release -a
RES>
Distributor ID: Debian
Description: Debian GNU/Linux unknown
Release: unknown
Codename: n/a
2013-11-01T11:12:28 janwas sagt /etc/debian_version?
2013-11-01T11:12:28 janREQ>
RES>
sieht etwas merkwürdig aus, bist du denn per konsole drauf oder führst Du das per cgi o.ä. aus? Da kann's dann sein, dass der Webserver auf Child-Prozesse wartet.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#!/usr/bin/perl use strict; use warnings; use diagnostics; use Fcntl qw(:DEFAULT :flock); my $pid; if ($pid = fork()) { # Eltern brauchen wir nicht mehr print STDOUT 'Laeuft...'; close STDOUT; close STDERR; exit(); } else { # Kind muss arbeiten sleep(10); sysopen(my $fh,'test_fork_sohn.txt',O_WRONLY|O_APPEND|O_CREAT); print $fh 'hier bin ich nach 10 Sekunden'; exit(); }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use Fcntl qw(:DEFAULT :flock);
print "Content-type: text/plain\n\n";
my $pid;
if ($pid = fork()) {
# Eltern brauchen wir nicht mehr
print STDOUT 'Laeuft...';
close STDOUT;
close STDERR;
exit();
}
else {
close STDOUT;
close STDERR;
# Kind muss arbeiten
sleep(10);
sysopen(my $fh,'test_fork_sohn.txt',O_WRONLY|O_APPEND|O_CREAT);
print $fh 'hier bin ich nach 10 Sekunden';
exit();
}
QuoteFilehandle STDERR reopened as $datei only for input at /meinscript.pl line xx.
2013-11-05T11:24:27 janprobier doch mal, das große script so weit zu vereinfachen, dass es nur den Fehler reproduziert. So ist es in der Tat nur herumstochern im Nebel.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2013-11-05T11:31:12 pq
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2013-11-05T17:12:11 pqda ich nicht sehe, wo du das no warnings plazierst, kann ich da auch nix zu sagen.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem1 2 3 4 5 6
close STDOUT; open my $fh, "<", "/tmp/testfile"; warn fileno($fh); __END__ Filehandle STDOUT reopened as $fh only for input at -e line 3. 1 at -e line 4.
1 2 3 4 5 6
close STDOUT; no warnings "io"; open my $fh, "<", "/tmp/testfile"; warn fileno($fh); __END__ 1 at -e line 5.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2013-11-05T18:54:15 pqwarum sollte man warnings also nicht genau davor abschalten?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# Meckern bis das Kamel stirbt use warnings; sub Foo { # hier nicht rumbrüllen wegen IO no warnings "io"; } if ($bool) { if (42) { # hier nicht rumbrüllen wegen IO no warnings "io"; } }
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem
Win32::Process auf Windows äußerst zufrieden. Hat lange gedauert, das zu finden.2013-11-01T19:39:33 topegWollten die PerlPorter Windows 100% unterstützen bräuchte man ein Dutzend verschiedenen Executables, um die verschiedenen Windowsversionen und Interfaces zu unterstützen.
Win32::Process relativ einfach gemacht werden kann.2013-11-01T19:39:33 topegWürden sich die Windows Entwickler dazu durchringen ein POSIX Konformes Interface einzubauen, gäbe es die ganzen Probleme nicht.
2013-11-01T19:39:33 topegBis dahin kann man Cygwin nutzen und damit ein perl mit fork. Dafür funktionieren die Win32 Module aber nicht...
2013-11-02T09:42:25 topegMan kann eine Anbindung ohne Abhängigkeiten schreiben. Die verschiedenen ABIs sind definiert. Aber der Aufwand ist nicht gering.