1 / 8

Daemon Processes and inetd Superserver

Daemon Processes and inetd Superserver. Ways to start a daemon syslogd daemon syslog function daemon_init function inetd daemon daemon_inetd function. Ways to Start a Daemon. Daemon: background process with no controlling terminal Ways to start a daemon:

Télécharger la présentation

Daemon Processes and inetd Superserver

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Daemon Processes and inetd Superserver • Ways to start a daemon • syslogd daemon • syslog function • daemon_init function • inetd daemon • daemon_inetd function

  2. Ways to Start a Daemon • Daemon: background process with no controlling terminal • Ways to start a daemon: • system initialization script in /etc or /etc/rc (superuser daemons: inetd, httpd, smtpd, syslogd, cron, etc.) • started by inetd superserver: telnet, ftp, etc. • executed on a regular basis by cron daemon • executed once, specified by at command, by cron • (re)started from user terminals

  3. syslog Daemon • Upon startup, syslogd performs: • read configuration file /etc/syslog.conf which specifies what to do with each log message (append to a log file or send to syslogd on another host) • create a Unix domain socket bound to /var/run/log • create a UDP socket bound to port 514 • open /dev/klog for kernel to input • syslogd then • calls select for I/O multiplexing on the above 3 file descriptors • reads log message and does action in conf

  4. syslog Function #include <syslog.h> void syslog (int priority, const char *message, … ); priority: level (0 ~ 7) and facility (type of process sending this message) (Upon the first call, syslog creates a Unix domain datagram socket and calls connect to /var/ run/log of syslogd.) void openlog (const char *ident, int options, int facility); (can be called before the first call to syslog) void closelog (void);

  5. daemon_init Function • Sequence to daemonize a process in daemon_init • fork and terminate the parent • setsid: child becomes process group leader with no controlling terminal • ignore SIGHUP and fork again, terminate the first child and leave the second child running (no longer a session leader) • set error functions, change working directory, clear file mode creation mask, close open descriptors • use syslogd for errors

  6. daemon_init Function #include “unp.h” #include <syslog.h> #define MAXFD 64 extern int daemon_proc; /* defined in error.c */ void daemon_init (const char *pname, int facility) { int I; pid_t pid; if ( (pid = Fork ( ) ) ! = 0 ) exit (0); /* parent terminates */ setsid ( ); /* becomes session leader */ Signal (SIGHUP, SIG_IGN); if ( (pid = Fork ( ) ) ! = 0 ) exit (0); /*1st child terminates */ daemon_proc = 1; /* for our err_xxx ( ) functions */ chdir (“/”); /* change working directory */ umask (0); /* clear our file mode mask */ for ( i = 0; i < MAXFD; i++) close (i); openlog (pname, LOG_PID, facility); }

  7. inetd Daemon daemonize itself read /etc/inetd.conf socket ( ) bind ( ) listen ( ) (if TCP socket) select ( ) for readability accept ( ) (if TCP socket) fork ( ) close all descriptors other than socket dup socket to descriptors 0, 1, 2; close socket setgid ( ) setuid ( ) (if uer not roor) exec ( ) server for each service listed in /etc/inetd.conf child parent close connected socket (if TCP)

  8. Daytime Server as a Daemon Invoked by inetd • Two major changes: • all socket creation code (tcp_listen, accept) is gone (these steps are done by inetd) • infinite for loop is gone (the server is invoked once per client connection)

More Related