13.1 Introduction
A daemon is a
process that runs in the background and is not associated with a
controlling terminal. Unix systems typically have many processes
that are daemons (on the order of 20 to 50), running in the
background, performing different administrative tasks.
The lack of a controlling terminal is typically
a side effect of being started by a system initialization script
(e.g., at boot-time). But if a daemon is started by a user typing
to a shell prompt, it is important for the daemon to disassociate
itself from the controlling terminal to avoid any unwanted
interraction with job control, terminal session management, or
simply to avoid unexpected output to the terminal from the daemon
as it runs in the background.
There are numerous ways to start a daemon:
-
During system
startup, many daemons are started by the system initialization
scripts. These scripts are often in the directory /etc or
in a directory whose name begins with /etc/rc, but their
location and contents are implementation-dependent. Daemons started
by these scripts begin with superuser privileges.
A few network servers are often started from
these scripts: the inetd superserver (covered later in
this chapter), a Web server, and a mail server (often
sendmail). The syslogd daemon that we will
describe in Section 13.2 is
normally started by one of these scripts.
-
Many network
servers are started by the inetd superserver.
inetd itself is started from one of the scripts in Step 1.
inetd listens for network requests (Telnet, FTP, etc.),
and when a request arrives, it invokes the actual server (Telnet
server, FTP server, etc.).
-
The execution
of programs on a regular basis is performed by the cron
daemon, and programs that it invokes run as daemons. The
cron daemon itself is started in Step 1 during system
startup.
-
The execution
of a program at one time in the future is specified by the
at command. The cron daemon normally initiates
these programs when their time arrives, so these programs run as
daemons.
-
Daemons can be
started from user terminals, either in the foreground or in the
background. This is often done when testing a daemon, or restarting
a daemon that was terminated for some reason.
Since a daemon does not have a controlling
terminal, it needs some way to output messages when something
happens, either normal informational messages or emergency messages
that need to be handled by an administrator. The syslog
function is the standard way to output these messages, and it sends
the messages to the syslogd daemon.
|