Christian Kruse: fork => END-Blöcke in separatem Prozess ausführen

Beitrag lesen

Hallo Philipp,

use POSIX qw/setsid/;

warum brauche ich den Session Identifier?

Damit du den Child-Prozess aus der Prozess-Hierarchie herausloesen kannst.

  • In der Doku hab ich nix gefunden, warum ich den explizit angeben muss.

Musst du nicht. Du kannst auch POSIX::setsid() schreiben -- nervt mich nur.
Ich importiere lieber explizit.

Kannst (oder wer anders) du es als fork/linux Experte erleutern?

Was hat das damit zu tun?

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;
}

Das kommt ja etwa auf das selbe raus, was ich getan hab, oder?

Nein, ich trickse nicht so rum mit den END-Block-Geschichten :)

Bist du dir sicher? - Das Problem mit exit(0) ist, dass der Prozess dann
eben weiterläuft und der Perlinterpreter die END-Blöcke _auch_ ausführt

Richtig, ja. Deshalb sollst du das ja auch nicht in die END- und
DESTROY-Bloecke packen. Wenn du das nicht *immer* bei *jedem* Script-Ende
ausfuehren willst, ist das eben das falsche Mittel.

Gruesse,
 CK