Hallo,
Ich hab mir deinen Vorschlag zu Herzen genommen: ;)
Nischt so ganz :)
else {
# main process ends
POSIX::_exit(0);
}
Immer noch. Tss.
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.
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),
Richtig.
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:
INIT
|
|- login
| - bash
| - pstree
|
|- httpd
- httpd[30]
- httpd
- perl
- perl
wenn du jetzt im letzten Perl-Prozess (ein Child des ersteren Perl-Prozesses)
ein setsid() aufrufst, sieht die Prozess-Hierarchie eben ganz anders aus:
INIT
|
|- login
| - bash
| - pstree
|
|- httpd
| - httpd[30]
| - httpd
| - perl
|- perl
Das Perl-Programm hat eine eigene Session bekommen.
also kein Risiko auf Zombies, kein Risiko, dass der Parentprozess
(GUI-Programm) durch den Child "aufgehalten" wird. Ist diese Aussage
richtig?
Ja.
Gruesse,
CK