Starting a daemon on a SVR3
Jacob Kan Yu
jky at neptune.dsc.com
Thu Jan 3 08:36:03 AEST 1991
wolf at grasp1.univ-lyon1.fr writes:
>On an old AIX, I use following code to start a daemon (which does not run
>with root privileges).
> setbuf(stdout,NULL); printf("Listserv v0.99: daemon started\n\r");
> if (fork()) exit (0); /* Dissociate us from tty */
> for (i=getdtablesize()-1; i>=0; i--)
> (void)close(i);
> (void)open("/",0);
> (void)dup2(0,1);
> (void)dup2(0,2);
> i=open("/dev/tty",2);
> if (i>=0) {
> ioctl(i,TIOCNOTTY,(char *)0);
> (void)close(i);
> }
>This works fine, but I get trouble when porting this daemon to an SRV3.
>getdtablesize does not exist anymore, so I close all open files manually
>with a fixed loop (I put 4 in first index).
What's about this:
for ( i = 0 ; i < NOFILE ; i++ )
close( i );
The problem I have is that "NOFILE" is 20 for System V/386 Release 3.0 and is
60 for Release 3.2 and the comments in "<sys/param.h>" says this number is
no longer a constant and should be removed in the next release. Anybody
have better idea?
>The ioctl call does also not exist, and I found no equivalence.
>After having executed the new code it loads itself in background and
>ps shows me it does not depend anymore on a tty. Despite this, when
>I loggoff, the process is being killed. Can anyone explain me what I
>have to do to start properly a daemon? Thanx.
I am not sure about this ioctl call but you probably should have your
program to ignore "SIGHUP" signal.
>--
>Christophe Wolfhugel | Email: wolf at grasp1.univ-lyon1.fr
>INSA Lyon - Departement Informatique | Fax: (+33) 72 44 08 00
>69621 Villeurbanne Cedex, France | (Attn-To: Wolfhugel - C 210)
Jacob Yu Internet: jky%neptune%dschub at hub.ucsb.edu
Uucp: pyramid!ucsbcsl!dschub!neptune!jky
Life is but a walking shadow.
> Disclaimer: these are my own opinions, not my employer's.
Yes, these are my own opinions too.
More information about the Comp.unix.questions
mailing list