UNIX First of all, it's daemon not demon o demon is an evil spirit o daemon is an attendant spirit (between human and god) how to see them? LEARN YOUR LOCAL "ps" COMMAND! BSD-style: "ps axuw" (SunOS 4.1.x, Linux, AIX) SysV-style: "ps -elf" (SunOS 5.x, IRIX, AIX, HP-UX) See page 278 of ESA. Daemon characteristics no controlling terminal runs in background Note that these general characteristics are similiar to a Windows NT service. Why have daemons? modularity - don't want to have to recompile the kernel to modify ftpd kernel size - want to keep the kernel small robustness - don't want the kernel to crash when a lowly daemon dies (say lpd) however, the death of some "kernel" daemons will generally kill the system Kernel and user daemons some daemons execute in kernel mode (pagedaemon and swapper) the rest execute in user mode beginning with init BSD swapper (PID 0) the swapper is a kernel daemon kernel memory - it functions wholly within the kernel memory kernel code - the code for the swapper is compiled into the kernel code kernel mode - it is executed in privileged execution mode like a system call, the swapper does not get time quanta function - the swapper moves whole processes between main memory and secondary storage (swapping out and swapping in) SA RELEVANCE: the swapper is the first process to start after the kernel is loaded if the machine crashes immediately after the kernel is loaded then you may not have your swap space configured correctly Was the kernel configured correctly? (See page 316 in ESA). OS other than BSD the swapper is described as a separate kernel process by Bach It appears in the Linux process table as kswapd. It does appear on AIX, HP-UX, IRIX, for example it appears in the Solaris process table as sched (the SysV swapper is sometimes called the scheduler because it 'schedules' the allocation of memory and thus influences the CPU scheduler) BSD pagedaemon (PID 2) the second process created by the kernel is the pagedaemon the pagedaemon is a kernel process originated with BSD systems (demand paging was initially a BSD feature) which was adopted by AT&T during System V Pageout process (PID 2) in Solaris implements pagedaemon's work SA RELEVANCE: this is all automatic - not much for the SA to do, except monitor system behavior to make sure the system isn't thrashing. init (PID 1) the first user process (user == root) all other processes are children of init depending on the boot parameters init either: - spawns a single-user shell at the console - begins the multi-user start-up scripts update() executes sync() every 30 seconds what does sync()system call do? flushes buffer cache - sync schedules the disk I/O delayed write - it is needed because UNIX uses delayed write for its buffer cache SA RELEVANCE Don't let users re-boot your UNIX systems (via physical access) It is better to halt the system using /etc/shutdown or halt these commands attempt to put the system in a quiescent state including calling sync() other OS see bdflush and update in Linux see fsflush in Solaris (PID 3) inetd even though well-written daemons consume little CPU time they do take up process table slots there began to be so many daemons that a super-daemon was written to manage the class of network daemons many network servers are mediated by the inetd daemon they may also be run without the inetd - started at boot time and run forever inetd listens for requests for connections and then starts the appropriate daemon some examples are: rlogin, telnet, ftp, talk, finger the inet daemon forks a child to handle the request the child inetd execs a server (for example, telnetd) the configuration file that tells the inetd which servers to manage is /etc/inetd.conf /etc/services This file maps TCP and UDP protocol server names to port numbers view /etc/services file note that some services support both tcp and udp protocols you can type: 'telnet xi.cs.fsu.edu smtp' to connect to the sendmail port Sun RPC (Remote Procedure Call) services are mapped to ports by the portmapper daemon. Look at inetd.conf: the 1st column is the name of the service the 2nd column designates the type of socket to be used with the service (almost always stream or datagram) the 3rd column designates the communication protocol (tcp is almost always paired with stream sockets and udp is almost always paired with datagram sockets) the 4th column applies only to datagram sockets - if the daemon can process multiple requests then put 'wait' here so the inetd doesn't keeping forking new daemons the 5th column specifies the username that the daemon should run under (for example - let's have fingerd run as 'nobody') the remaining columns give the pathname and arguments of the daemons (here's where TCP wrappers are typically installed). Linux (usually) comes with the "tcpd" wrapper installed SA RELEVANCE when installing new software packages you may have to modify /etc/inetd.conf and/or /etc/services a hangup signal will get the inetd to re-read its config file - 'kill -HUP pid' portmap As mentioned above, maps RPC services to ports (/etc/rpc) RPC servers register with this daemon RPC clients get the port number for a service from the daemon you can get a lot of information using 'rpcinfo' For example, rpcinfo -p will list the RPC services on the local machine, then you can see which other machines on the same local network provide the same services Try: rpcinfo -b ypbind 1 syslogd the syslogd is a daemon whose function is to handle logging requests from: the kernel other user processes (daemons) processes on other machines (across the net) a process can make a logging request to the syslogd by using the function syslog() syslog(priority, message, facility) priority is level of criticality such as LOG_ALERT or LOG_WARNING message is a string containing the message to be sent facility - source of message: LOG_USER, LOG_KERN, LOG_AIL the syslogd determines what to do with logging requests according to the configuration file /etc/syslog.conf Example syslog.conf: *.err;kern.debug;user.none /dev/console *.err;kern.debug;daemon,auth.notice; /var/adm/messages auth.notice ifdef(`LOGHOST', /var/log/authlog, @loghost) line 1 says write messages of priority level LOG_ERROR from all sources to /dev/console (also kernel debug and no user messages) line 3 sends authorization messages to the LOGHOST If you want to log a message you can make the call: syslog(LOG_ERR,''hi there, etc, etc'',LOG_USER); Windows NT You can see the processes running under Windows NT 4.0 via the Windows NT Task Manager -- Press CTRL-ALT-DEL, select Task Manager, or just press CTRL-SHIFT-ESC. You can see/end/modify/switch/create applications, see/end processes, and view CPU/memory performance. A nice feature of the Processes display is the ability to sort on any column by clicking on the column header (the sort toggles from ascending/descending). Quite a nice display! You can also view the lists of services through the Control panel "Services" icon. Page 48 of EWNTSA gives more information on managing NT services, like the slick "sclist" command (from the NT Resource Kit; more on this later). We will cover NT's logging of system errors and events later.