Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I hear a lot of talk about Daemons running on my Ubuntu computer - what are they?

share|improve this question
up vote 13 down vote accepted

In short, a Daemon is a background process.

Daemons can just be normal programs that run in the background, however most are created by starting a process, forking it and exiting the parent.

To fork a process means to create an exact copy of it. The parent of that process, if the real parent terminates right away, is now the init process at /sbin/init, which is the first thing started on every Unix-like operating system. Now, the process is termed a Daemon, it has no TTY associated with it.

Here's an example of a Daemon in Python:

import sys, os, time

pid = os.fork()

# there now exist two processes
if pid > 0: # If this is the parent,
    sys.exit(0) # quit.

# this is the background part:
time.sleep(5)
print "Hello, World!"

It's not yet one, strictly speaking. You'd also have to change the current working directory, redicted standard input and output to log-files and so on. You can read up on the gory details in this wikipedia article.

If you run the example, you'll notice, after two seconds it prints, even though the process you started on the command-line has terminated. The copy of this process is run 'by' init now.

share|improve this answer
7  
to expand on this, if you're coming to Linux from Windows, you can think of daemons as the *nix equivalent of Windows' "services". – nathwill Feb 15 '11 at 22:32
    
@stefano-palazzo You said "...it has no TTY associated with it", but then "...you'll notice, after two seconds it prints...". I thought detaching the TTY meant you couldn't write to the terminal. – Jorge Bucaran Jun 23 at 4:52
    
@JorgeBucaran Yes. The printing is a bit naughty. It can still have a handle to the standard output stream of the tty that started it. When you open a file (like /dev/stdout), you get a number (called the file descriptor), and that is all you need to write to it as long as the process that has opened it is still running (you can see opened files in /proc/*/fd). A well behaved daemon will detach itself completely from the tty by giving up the handles to stdout, stderr, and stdin. – Stefano Palazzo Jun 23 at 5:08
    
@StefanoPalazzo I see. One can retain a reference to the parent's process std/out/err and still detach from it. If I can arbitrarily keep a reference to the TTY, then, what does it mean to detach a process? I found <superuser.com/questions/178587/…; useful, but still feel unclear. – Jorge Bucaran Jun 23 at 6:09
    
@JorgeBucaran it means to overwrite the processes own stdio (e.g. by using dup2) with new ones you have created (like a log file). Here's a full example – Stefano Palazzo Jun 23 at 6:17

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.