daemonprocess.h.html

    // Copyright (c) 1999-2000 David Muse
    // See the COPYING file for more information.

    #ifndef DAEMONPROCESS_H
    #define DAEMONPROCESS_H

    #include <sys/types.h>
    #include <rudiments/signalclasses.h>

    // Daemons are long running processes which often detach themselves from
    // the controlling terminal and run in the background.  They are frequently
    // started at boot time and run until the machine is shut down.
    //
    // Daemons typically perform "housecleaning" tasks or serve data to client
    // programs.  See the server class.

    class daemonprocess {
            public:
                                    daemonprocess();
                            virtual ~daemonprocess();

                            int     checkForPidFile(char *filename);
                                    // Checks for filename "filename" and reads the
                                    // process id out of it, if it exists.  Returns
                                    // the process id on success or 0 on failure.
                            void    createPidFile(char *filename);
                                    // Create's file "filename" and puts the current
                                    // process id in it.  Note that when you delete
                                    // this file during shutdown you must use the
                                    // full pathname since the detach() method
                                    // below changes directories to "/".

                            void    detach();
                                    // Detach from the controlling terminal and
                                    // process and run in the background.  Also
                                    // change directories to "/" and set the file
                                    // creation mask such that all files are
                                    // created -rw-rw-rw and all directories
                                    // drwxrwxrwx.

                            // These methods allow the daemon to run as a different
                            // user or group than the one that started the process.
                            // They have no effect unless the process is started
                            // by the root user.
                            int     runAsUser(char *username);
                            int     runAsGroup(char *groupname);
                            int     runAsUserId(uid_t uid);
                            int     runAsGroupId(gid_t gid);

                    static  void    handleShutDown(void *shutdownfunction);
                                    // This method allows you to designate a
                                    // function to run when the daemon is killed.

            private:
                    #include <rudiments/private/daemonprocess.h>

    };

    #endif