|
// 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
|