// $Id$
//
-// Copyright (C) 2007
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer NETwork research (NET)
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
// Custom includes
#include <boost/utility.hpp>
+#include "../Logger/SenfLog.hh"
//#include "Daemon.mpp"
///////////////////////////////hh.p////////////////////////////////////////
namespace senf {
- /** \brief Daemon process
+ /** \brief %Daemon process
- senf::Daemon provides simple management for daemon processes. Specifically, the Daemon class
+ %senf::Daemon provides simple management for daemon processes. Specifically, the %Daemon class
implements
\li <i>Safe startup.</i> If the startup fails, the foreground process which launches the
daemon will terminate with an appropriate error exit code.
class Daemon : boost::noncopyable
{
public:
+ SENF_LOG_CLASS_AREA();
+
///////////////////////////////////////////////////////////////////////////
// Types
successful startup. */
int argc(); ///< Access command line parameter count
- char const ** argv(); ///< Access command line parameters
+ char ** argv(); ///< Access command line parameters
+ void removeDaemonArgs(); ///< Remove the daemon arguments from argc()/argv()
+
+ static void exit(unsigned code=0); ///< Terminate daemon with failure
- void exit(unsigned code=0); ///< Terminate daemon with failure
+ void logReopen(); ///< Reopen the log files
+ /**< This is used when rotating the logs. By default,
+ SIGHUP calls logReopen. */
///\}
- int start(int argc, char const ** argv); ///< Called from main() to launch daemon.
+ int start(int argc, char ** argv); ///< Called from main() to launch daemon.
/**< Normally not called directly but from the
\ref SENF_DAEMON_MAIN macro. */
+ static Daemon & instance(); ///< Return the Daemon instance
+
protected:
Daemon();
This member is only called, if the default main()
implementation is not overridden. */
private:
-
void openLog();
void fork();
bool pidfileCreate();
+ void installSighandlers();
int argc_;
- char const ** argv_;
+ char ** argv_;
bool daemonize_;
std::string stdoutLog_;
int stdout_;
int stderr_;
std::string pidfile_;
+ bool pidfileCreated_;
bool detached_;
+
+ static Daemon * instance_;
};
/** \brief Provide \c main() function
\ingroup process
*/
# define SENF_DAEMON_MAIN(klass) \
- int main(int argc, char const ** argv) \
+ int main(int argc, char ** argv) \
{ \
klass instance; \
return instance.start(argc, argv); \
}
///////////////////////////////hh.e////////////////////////////////////////
-//#include "Daemon.cci"
+#include "Daemon.cci"
//#include "Daemon.ct"
//#include "Daemon.cti"
#endif