E-MailRelay
Public Member Functions | Static Public Member Functions | List of all members
G::PidFile Class Reference

A class for creating pid files. More...

#include <gpidfile.h>

Public Member Functions

 PidFile (const Path &pid_file_path)
 Constructor. More...
 
 PidFile ()
 Default constructor. More...
 
 ~PidFile ()
 Destructor. Calls cleanup() to delete the file. More...
 
void mkdir ()
 Creates the directory if it does not already exist. More...
 
void commit ()
 Creates the pid file if a path has been defined. More...
 
bool committed () const
 Returns true if commit() has been called with a valid path(). More...
 
Path path () const
 Returns the full path of the file. More...
 
 PidFile (const PidFile &)=delete
 
 PidFile (PidFile &&)=delete
 
PidFileoperator= (const PidFile &)=delete
 
PidFileoperator= (PidFile &&)=delete
 

Static Public Member Functions

static bool cleanup (SignalSafe, const char *path) noexcept
 Deletes the specified pid file if it contains this process's id. More...
 

Detailed Description

A class for creating pid files.

Works with G::Root and G::Daemon so that the pid file can get created very late in a daemon startup sequence. Installs a signal handler so that the pid file gets deleted on process termination.

Usage:

G::PidFile pid_file ;
if( !path.empty() )
{ pid_file.init(path) ; pid_file.check() ; }
G::Root::init("nobody") ;
if( daemon ) G::Daemon::detach( pid_file ) ;
{ G::Root claim_root ; pid_file.commit() ; }
static void detach()
Detaches from the parent environment.
bool empty() const noexcept
Returns true if size() is zero.
Definition: gpath.h:212
A class for creating pid files.
Definition: gpidfile.h:57
void commit()
Creates the pid file if a path has been defined.
Definition: gpidfile.cpp:129
Path path() const
Returns the full path of the file.
Definition: gpidfile.cpp:143
A class which acquires the process's special privileges on construction and releases them on destruct...
Definition: groot.h:52
static void init(const std::string &nobody, bool fixed_group=false)
< Destructor.
Definition: groot.cpp:80
See also
G::Daemon

Definition at line 56 of file gpidfile.h.

Constructor & Destructor Documentation

◆ PidFile() [1/2]

G::PidFile::PidFile ( const Path pid_file_path)
explicit

Constructor.

A relative path is converted to an absolute path using the cwd. Use commit() to actually create the file.

Definition at line 38 of file gpidfile.cpp.

◆ PidFile() [2/2]

G::PidFile::PidFile ( )
default

Default constructor.

Constructs a do-nothing object.

◆ ~PidFile()

G::PidFile::~PidFile ( )

Destructor. Calls cleanup() to delete the file.

Definition at line 43 of file gpidfile.cpp.

Member Function Documentation

◆ cleanup()

bool G::PidFile::cleanup ( SignalSafe  safe,
const char *  path 
)
staticnoexcept

Deletes the specified pid file if it contains this process's id.

Claims root privilege to read and delete the pid file (see G::Root::atExit()).

This is not normally needed by client code since it is installed as a signal handler (see G::Cleanup) and called from the destructor.

Signal-safe, reentrant implementation.

Definition at line 109 of file gpidfile.cpp.

◆ commit()

void G::PidFile::commit ( )

Creates the pid file if a path has been defined.

Also installs signal handlers to cleanup() the file on abnormal process termination. Throws on error.

The caller should switch effective user-id and umask as necessary.

Definition at line 129 of file gpidfile.cpp.

◆ committed()

bool G::PidFile::committed ( ) const

Returns true if commit() has been called with a valid path().

Definition at line 138 of file gpidfile.cpp.

◆ mkdir()

void G::PidFile::mkdir ( )

Creates the directory if it does not already exist.

The caller should switch effective user-id and umask as necessary.

Definition at line 56 of file gpidfile.cpp.

◆ path()

G::Path G::PidFile::path ( ) const

Returns the full path of the file.

Definition at line 143 of file gpidfile.cpp.


The documentation for this class was generated from the following files: