Implementing a signal handler
In the previous recipe, we wrote a simple but functional daemon. However, there are some problems with it; for example, the PID file isn't removed when the daemon is killed. Likewise, the open file stream (/tmp/my-daemon-is-alive.txt
) isn't closed when the daemon is killed. A proper daemon should clean up after itself when it exits.
To be able to clean up on exit, we need to implement a signal handler. The signal handler should then take care of all the cleanup before the daemon is terminated. We have already seen examples of signal handlers in this chapter, so this concept isn't new.
It's not only daemons that use signal handlers, though. This is a common way of controlling processes, especially processes that don't have a controlling terminal.
Getting ready
You should read the previous recipe before reading this one so that you understand what the daemon does. Other than that, you'll need the programs listed...