Hoi,
use POSIX;
$SIG{CHLD} = 'IGNORE';
wird beim beenden gestartet:
my $pid = fork();
die 'could not fork' unless (defined $pid);
if ($pid == 0) {
# child
close STDOUT; close STDERR;
open( STDOUT, '>./t.txt' );
exit(0); # calls END Blocks on Schedulers (Automatisms)
} else {
# parent, $pid is child-pid
POSIX::_exit(0); # no END Block is ever called -> exits immediately
}
Mach das mal richtig und sauber:
use POSIX qw/setsid/;
my $pid = fork;
unless($pid) {
die 'could not fork!' unless defined $pid;
# process is no longer a child
die 'could not remove session' unless setsid;
}
else {
# main process ends
exit 0;
}
Code, der lange dauert
Dein Getrickse mit POSIX::_exit() ist da voellig ueberfluessig und verwirrt
nur. Der 'Trick' ist hier recht einfach: der Child wird aus der Prozess-Gruppe
herausgeloest und bekommt eine eigene Session.
Gruesse,
CK