What are the behavioral differences between a daemon and a normal process?

Lazer picture Lazer · Aug 31, 2010 · Viewed 24.9k times · Source

I know that daemons run in the background mostly i.e. they require very less interaction from the user.

Wikipedia lists some of the types of daemons that commonly exist:

  • Dissociating from the controlling tty
  • Becoming a session leader
  • Becoming a process group leader
  • Staying in the background by forking and exiting (once or twice). This is required sometimes for the process to become a session leader. It also allows the parent process to continue its normal execution. This idiom is sometimes summarized with the phrase "fork off and die"
  • Setting the root directory ("/") as the current working directory so that the process will not keep any directory in use that may be on a mounted file system (allowing it to be unmounted).
  • Changing the umask to 0 to allow open(), creat(), et al. calls to provide their own permission masks and not to depend on the umask of the caller
  • Closing all inherited open files at the time of execution that are left open by the parent process, including file descriptors 0, 1 and 2 (stdin, stdout, stderr). Required files will be opened later.
  • Using a logfile, the console, or /dev/null as stdin, stdout, and stderr

I want to know if there can be any differences in behavior in a daemon as differentiated from a normal process, apart from the one I mentioned in the first line. Both kinds of processes do their work, and interact with the user depending on the amount of interaction they need to do their job.

Is there more to daemons than this?

Answer

Tyler McHenry picture Tyler McHenry · Aug 31, 2010

Not really. A daemon is just a term for a process that runs continuously and usually is not attached to a terminal.

Daemons are not a separate class of processes and they have no special privileges or attributes.

There is a BSD/Linux C function called daemon (man page), but this is just really a simple way to detach your process from its terminal. It is so named because that's what daemons usually do, not the other way around.