Philipp Hasenfratz: fork => END-Blöcke in separatem Prozess ausführen

Beitrag lesen

Halihallo Christian

else {
  # main process ends
  POSIX::_exit(0);
}

Immer noch. Tss.

ich bin untröstlich ;-)

Mensch, wenn du die END- und DESTROY-Bloecke nicht *jedesmal* ausfuehren
willst, dann benutze sie nicht. Dann sind sie das falsche Mittel. Auf biegen
und Brechen irgendwelche Features zu benutzen kann nicht Sinn und Zweck der
Sache sein.

Nun denn. Ich muss mich vielleicht etwas rechtfertigen:
Ich verstehe deine Kritik zu schätzen und werde mich auch danach richten. Der Grund, warum ich überhaupt mit dem END Zeug angefangen habe, war der, dass einige Aufgaben einfach am Ende ausgeführt werden sollen. Das diese sehr viel Zeit in Anspruch nehmen würde und so die Interaktion zwischen Benutzer und Webapp beeinträchtigt, hätte ich nicht erwartet. Folglich habe ich nach einer einfachen Lösung gesucht, wie ich das auf die schnelle hinbiegen kann (ohne die Ferien auf's Spiel zu setzen) und bin auf POSIX::_exit gestossen. Mir ist das auch zuwider (ich kritisiere das selbe wie du) und werde das nachher auch ausbessern. Aber vorerst läuft das und ich hab nicht die Zeit dies auf eine akzeptable Lösung umzuprogrammieren.

Also, wenn ich dich hier recht verstehe, dann erreichst du mit setsid eine
komplette Trennung zwischen dem Parent und dem Child (das ist wohl mit
Session gemeint),

Unter UNIX sind Prozesse hierarchisch angeordnet. Wenn du ein Tool wie pstree
hast, kannst du dir das wunderbar anschauen. Unter Linux koennte das z. B.
so aussehen:

[...]

Aha. Das hat man eben davon, wenn man sich bisher nur an Win gewagt hat... Da gibt's sowas wie ein Taskmanager, wo alle Prozesse in einer linearen Liste aufgezeigt wird... M$ mässig eben... ;-)

zum anderen Posting:

  • 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.

Ja, das ist klar. Sorry, hab da was durcheinandergebracht.

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.

s. oben. War von Anfang an eben so geplant, jedoch die Verzögerung des Outputs hat mir einen Strich durch die Rechnung gemacht. Werde das nach den Ferien umprogrammieren. Ein Modul, was die Automatisierungen ausführt (fork und eigene Session) und der Parent läuft ganz normal weiter. Gut, der END-Block wird bleiben (das macht ja auch Sinn), aber es wird kein _exit(0) mehr geben.

ach ja:

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

Was hat das damit zu tun?

das es setsid in Windows nicht gibt (bzw. das ganze fork-setsid Gespann), bzw. der Unterschied nicht erkennbar ist, vielleicht? :-)

Viele Grüsse und nochmals danke für deine Hilfe

Philipp