Schrift
[thread]6833[/thread]

Verständnisproblem mit fork()

Leser: 4


<< >> 8 Einträge, 1 Seite
Froschpopo
 2005-04-02 10:09
#53149 #53149
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich hab mir heut nacht mal das Kamelbuch reingezogen. Was die beiden da über Threads schreiben hat mir fast angst gemacht :D
Hab dann mal hier im Forum nach fork gesucht und bin dann auf das hier gestoßen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl
$|++;

print "Erzeuge Kind was 5 Sekunden schlaeft...\n";
my $pid = fork();    # erzeuge Kind
unless($pid) {       # Block wird nur im Kind abgearbeitet
 sleep 5;
 exit;
}
print "Kind erfolgreich gestartet [$pid]\n" if defined $pid;
print "... und weiter gehts!...\n";

Sieht irgendwie ziemlich leicht aus, wo sind da die Haken?
Muss man das Kind danach noch killen oder wo ist das Problem? Funktioniert das auch auf Windows?\n\n

<!--EDIT|Froschpopo|1112422211-->
Froschpopo
 2005-04-02 10:21
#53150 #53150
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
die Probleme fangen schon an, wenn ich das Programm beenden will:
attempt to free non-existent shared string at C:/perl/site/lib/Tk/Widget.pm

was mach ich falsch?\n\n

<!--EDIT|Froschpopo|1112422898-->
Ishka
 2005-04-02 13:53
#53151 #53151
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Soweit ich weiß funktioniert fork, zumindestens unter älteren Windows-Versionen, nicht oder nicht korrekt und ist auch kein eigener Prozess, sofern es funktioniert.

das Kind beendet sich ja mit exit, also mußt du es nicht mehr töten.

Achja: im Kind kannst du die Tk-Funktionen nicht verwenden, da es irgendwelche Probleme in Kombination mit fork gibt (bzw. ob das Probleme sind ist unklar, man will ja beim fork nicht zwangsläufig, daß das Programmfenster nochmal aufgeht, nur manchmal kommt das einem als Problem vor.)
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
Froschpopo
 2005-04-02 13:55
#53152 #53152
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
soweit hab ich das verstanden,
aber muss ich auch etwas grundlegendes noch an meinem Script beachten?
Gibt es einen bestimmten Umgang mit Variablen außer strict ?
Ishka
 2005-04-02 13:58
#53153 #53153
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Jo, es wird nicht auf die gleichen Variablen zugegriffen, sondern auf eine Kopie aller Variablen. Irgendwie kann man das auch machen, aber ich weiß nicht wie.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
renee
 2005-04-02 16:47
#53154 #53154
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Kommunikation zwischen parent und child läuft über Pipes...

lesenswert:
perldoc perlfork
perldoc -f fork
perldoc -f pipe
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/
coax
 2005-04-02 17:13
#53155 #53155
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
und
perldoc perlipc
,,Das perlt aber heute wieder...'' -- Dittsche
ptk
 2005-04-03 01:12
#53156 #53156
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Versuch mal zu forken bevor du das erste Tk-Fenster erzeugst.
<< >> 8 Einträge, 1 Seite



View all threads created 2005-04-02 10:09.