[EMAIL PROTECTED] - Digest    Tuesday, February 20 2001    Volume 01 : Number 265




----------------------------------------------------------------------

Date: Tue, 20 Feb 2001 06:23:20 +0100
From: Martin Schmitt <[EMAIL PROTECTED]>
Subject: Re: [PUG]Daemeon mit perl

* Markus Hahn ([EMAIL PROTECTED]) wrote/schrieb:

> 1.Gibt es Perl-module die daf�r sorgen das ein Programm sich von der
> Shell verabschiedet und als Daemon im Hintergrund l�uft? 
> (unter CPAN.org nichts vern�nftiges gefunden.)

Daf�r brauchst Du kein Modul. Read the FAQ:

http://www.perl.com/pub/doc/manual/html/pod/perlfaq8.html#How_do_I_fork_a_daemon_process_

Ich hab hier einen selbstgeschriebenen Daemon, der meine Sigs austauscht,
da sieht die Kernfunktionalit�t so aus:

if ( fork() == 0 ) {
        $0 = "sigmaker";
        setsid() or die "Failure while trying to fork: $!\n";
        chdir "/" or die "Can't chdir to Root: $!\n";
        open STDIN, "</dev/null" or die "Access to /dev/null failed: $!\n";
        open STDOUT, ">/dev/null" or die "Access to /dev/null failed: $!\n";
        open STDERR, ">/dev/null" or die "Access to /dev/null failed: $!\n";
        while (1){
                open fdOUT, ">$sigout" or die "Can't open $sigout: $!\n";
                print fdOUT "$sig[int(rand($#sig+1))]\n";
                close fdOUT;
                sleep $delay;
        }
}else{
        print "Forking into background\n";
}

(Ich mache, weil ich das bei der Kundschaft tun mu�, auch zuhause viel auf
Englisch...)

Das schwierige dabei ist, sich die Sache mit if (fork() == 0) zu
verinnerlichen. Dazu mindestens die Manpage von fork lesen, und wo Du schon
dabei bist, die Manpage von setsid. Sind beide recht kurz und verst�ndlich.

Wenn Du es ganz richtig machen willst, brauchst Du noch Signalhandler, aber
das mu� nicht unbedingt sein.

> 2.Unter CPAN gibt es ein EVENT::Time modul wie baue ich das richtig in
> das Script ein?

EVENT::Time gibt es auf CPAN nicht. Ich kann mir aber denken, was Dein
Problem ist. Du solltest Dir mal irgendwo einen Text �ber objektorientierte
Programmierung suchen, am besten mit Perl-Schwerpunkt. Dann wird die
Verwendung von Modulen etwas verst�ndlicher. 

In "Fortgeschrittene Perl-Programmierung" gibt es z.B. ein Kapitel dar�ber. 
Wenn Du das Buch schon hast, ist das Kapitel �ber Datenstrukturen ganz am 
Anfang auch recht lohnend als Grundlage. "Perl in a Nutshell" hat am
Anfang des Kapitels mit den Modulen auch ein paar Seiten �ber Klassen, 
Instanzen und Methoden, aber das scheint mir ziemlich knapp bemessen zu 
sein.  

> Ich beise mir auch noch die Z�hne daran aus und halte euch auf dem
> laufenden.

Viel Erfolg. :-)

Fast h�tte ich es vergessen. Damit fork() und setsid() funktionieren,
brauchst Du "use POSIX qw(fork setsid);" am Anfang des Scripts.

Ciao,

- -martin

- -- 
I haven't lost my mind; I'm sure it's backed up on tape somewhere!

------------------------------

End of [EMAIL PROTECTED] - Digest V1 #265
************************************

--------------------------------------------------------------------------
Digest von "[EMAIL PROTECTED]" - http://www.pug.org

Antwort per Email an