Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12056[/thread]

Proble beim fork(en)

Leser: 2


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Gast Gast
 2008-06-23 19:24
#110729 #110729
renee+2008-06-23 15:58:42--
Vielleicht hilft Dir dieser Wiki:Artikel weiter...

Ja, ähnliches hatte ich bereits mit einem Pipe Handle versucht.
Werde mal versuchen den Code einzubauen.

Frage:
funktioniert das Teil tatsächlich ohne
Code: (dl )
use IPC::Open2

Hintergrund meines Problems:
auf dem Webserver darf ich maximal 10 Prozesse starten.
Zur Ausführung des Scripts benötige ich aber mindestens 60 Forkprozesse.
Damit muß ich also die Anzahl der 'Kinder' so limitieren dass ich deren Output immer noch im Hauptprogramm verwenden kann.
Gast Gast
 2008-06-22 18:19
#111331 #111331
Hallo,

wenn ich innerhalb einer Subroutine mit fork() einen Childprozess erzeuge, dann kann der Prozess zwar auf andere Subroutinen des Hauptprogramms (und auch auf anonyme Subroutinen die in Stringvariablen der erzeugenden Subroutine enthalten sind) zugreifen, nicht jedoch auf Variablen des Hauptprogramms und/oder der erzeugenden Subroutine.

Kann mir da jemand weiterhelfen?
Gast Gast
 2008-06-22 21:27
#111333 #111333
Hab mich registriert - kommt aber leider keine email
moritz
 2008-06-22 21:53
#111334 #111334
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Kannst du mal bitten ein einfaches Beispiel schreiben, dass das demonstriert?
(Und ich hoffe du benutzt nicht windows, da geht fork nicht so toll)
GwenDragon
 2008-06-22 21:58
#111335 #111335
User since
2005-01-17
14746 Artikel
Admin1
[Homepage]
user image
Gast+2008-06-22 19:27:14--
Hab mich registriert - kommt aber leider keine email
Dasst du hier ohne Angabe deines registrierten Nutzernamens das schreibst, nutzt herzlich wenig.
Schicke bitte mal eine E-Mail an boardmaster@perl-community.de mit dem Accountnamen und beschreibe was nicht geht, dass die Mailbenachrichtigung nach der Registrierung fehlt.


//EDIT: Ich habe gerade meine Registrierungsmail für einen Testaccount bekommen.
FoolAck
 2008-06-22 22:55
#111336 #111336
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $outer = "foo";

sub testSub {
my $inner = "baz";
my $forkID = fork();
if ($forkID == 0) {
print "outer = $outer\ninner = $inner\n";
}
return;
}

testSub();
So hätte ich das Problem jetzt verstanden. Vielleicht meint er ja aber auch, dass er Werte von Variablen im Eltern-Prozess vom Kindprozess aus nicht verändern kann (auch nicht über Referenzen..).
Gast Gast
 2008-06-23 12:38
#111348 #111348
Extrahiert sieht das Script so aus:
Code: (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
#!/usr/bin/perl
use strict;
use warnings;

my @outer;
testSub();
print @outer;

sub testSub {
my ($pid, $inner);
my $cnt = 0;

for (1 .. 5) {
if (defined($pid = fork)) {
if ($pid == 0) {
$inner = ++$cnt;
push @outer, "Child: $inner\n";
exit(0);
}
else {
print "PID: $pid\n";
next;
}

}
else { die "Can't fork $!" }

}
}


Problem:
nach Durchlaufen der Subroutine ist @outer immer noch leer.
moritz
 2008-06-23 12:44
#111349 #111349
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Parent und Child teilen sich keine Variablen - das ist ein Feature. Der Prozess, in dem das push auf @outer durchgeführt wird, endet ja sofort danach, die Änderungen sterben mit dem Prozess.
Gast Gast
 2008-06-23 17:55
#111382 #111382
moritz+2008-06-23 10:44:41--
Parent und Child teilen sich keine Variablen - das ist ein Feature. Der Prozess, in dem das push auf @outer durchgeführt wird, endet ja sofort danach, die Änderungen sterben mit dem Prozess.

Also ohne Zwischenspeichern der Werte in eine Datei, hab ich da tatsächlich keine Chance?
renee
 2008-06-23 17:58
#111383 #111383
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vielleicht hilft Dir dieser Wiki:Artikel weiter...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2008-06-22 18:19.