Schrift
[thread]343[/thread]

Prozesssteuerung: nicht auf Kindprozesse warten

Leser: 6


<< >> 8 Einträge, 1 Seite
nobody
 2004-08-04 23:42
#3295 #3295
User since
2004-08-04
1 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen !

Ich habe folgendes Problem:
Ich starte von meinem Perl(CGI-Script) ein anderes Perl-Skript, möchte aber nicht auf das Ergebnis vom zweiten Perl-Skript warten, da das zweite Perl-Skript als daemon läuft!

Mit fork() und system ("...") habe ich schon versucht hab aber keinen erfolg.

Kann mir jemand bitte helfen.
Ronnie
 2004-08-05 00:16
#3296 #3296
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
probier es mal mit exec.
[E|B]
 2004-08-05 00:35
#3297 #3297
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=Ronnie,04.08.2004, 22:16]probier es mal mit exec.[/quote]
exec beendet allerdings das laufende Script. Je nachdem ob er das will.
Vielleicht eine Pipe erzeugen?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
jan
 2004-08-05 01:04
#3298 #3298
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
vielleicht mit CPAN:Proc::Background?
ptk
 2004-08-05 01:53
#3299 #3299
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[E|B
,04.08.2004, 22:35][quote=Ronnie,04.08.2004, 22:16]probier es mal mit exec.

exec beendet allerdings das laufende Script. Je nachdem ob er das will.[/quote]
Nicht wenn er fork vorher macht.

So verwendet man fork + exec:
Code: (dl )
1
2
3
4
5
6
7
8
my $pid = fork;
if (!defined $pid) {
die "Irgendwas ist schief gelaufen: $!";
} elsif ($pid == 0) { # child
exec "externes kommando", "arg1", ...;
die $!;
}
# hier laeuft der parent weiter
Gast Gast
 2004-08-05 12:14
#3300 #3300
[quote=ptk,04.08.2004, 23:53]
[E|B
,04.08.2004, 22:35][quote=Ronnie,04.08.2004, 22:16]probier es mal mit exec.

exec beendet allerdings das laufende Script. Je nachdem ob er das will.[/quote]
Nicht wenn er fork vorher macht.

So verwendet man fork + exec:
Code: (dl )
1
2
3
4
5
6
7
8
my $pid = fork;
if (!defined $pid) {
  die "Irgendwas ist schief gelaufen: $!";
} elsif ($pid == 0) { # child
  exec "externes kommando", "arg1", ...;
  die $!;
}
# hier laeuft der parent weiter
[/quote]
Hallo !

Danke für die Hilfe an Allen.
Mit fork + exec habe ich auch schon versucht... , bekomme trotzdem keine Fertigmeldung von parentscript, anscheinen wartet er bis childscript sich beendet hat.

Hat jemand vielleicht noch ne weitere Idee ?
pq
 2004-08-05 12:22
#3301 #3301
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
close STDIN; close STDOUT; close STDERR; im child?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
sri
 2004-08-05 13:16
#3302 #3302
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Für eine komplette trennung (daemonisierung) ist folgendes erforderlich. :)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use POSIX 'setsid';

chdir '/'; # Nicht zwangsläufig aber zu empfehlen
umask 0; # Lalala
open STDIN, '/dev/null'; # Daemons interagieren nicht
open STDOUT, '>/dev/null'; # Unsere konsole soll sauber bleiben
open STDERR, '>/dev/null'; # dito
my $pid = fork; # Child starten
exit if $pid; # Parent töten
setsid; # Wir wollen init als neuen parent

while (1) {
# Sachen machen
}
\n\n

<!--EDIT|sri|1091697415-->
<< >> 8 Einträge, 1 Seite



View all threads created 2004-08-04 23:42.