PTLib  Version 2.18.8
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PProcess Class Reference

This class represents an operating system process. More...

#include <pprocess.h>

Inheritance diagram for PProcess:
Collaboration diagram for PProcess:

Classes

class  HostSystemURLHandlerInfo
 This class can be used to register various URL types with the host operating system so that URLs will automatically launch the correct application. More...
 
struct  MemoryUsage
 
struct  RunTimeSignalInfo
 
struct  VersionInfo
 Version information. More...
 

Public Member Functions

void PreInitialise (int argc, char **argv)
 Internal initialisation function called directly from InternalMain(). More...
 
virtual int InternalMain (void *arg=NULL)
 Main function for process, called from real main after initialisation. More...
 
virtual bool IsServiceProcess () const
 
bool SignalTimerChange ()
 
 ~PProcess ()
 
Overrides from class PObject
Comparison Compare (const PObject &obj) const
 Compare two process instances. More...
 
virtual void PrintOn (ostream &strm) const
 This will print out performance indicators for the process. More...
 
Overrides from class PThread
virtual void Terminate ()
 Terminate the process. More...
 
- Public Member Functions inherited from PThread
bool IsAutoDelete () const
 
int PXBlockOnChildTerminate (int pid, const PTimeInterval &timeout)
 
int PXBlockOnIO (int handle, int type, const PTimeInterval &timeout)
 
void PXAbortBlock () const
 
void PrintOn (ostream &strm) const
 Standard stream print function. More...
 
 P_DECLARE_TRACED_ENUM (Priority, LowestPriority, LowPriority, NormalPriority, HighPriority, HighestPriority)
 Codes for thread priorities. More...
 
 PThread (PINDEX stack, AutoDeleteFlag deletion=AutoDeleteThread, Priority priorityLevel=NormalPriority, const PString &threadName=PString::Empty())
 Create a new thread instance. More...
 
 ~PThread ()
 Destroy the thread, this simply calls the Terminate() function with all its restrictions and penalties. More...
 
virtual void Restart ()
 Restart a terminated thread using the same stack priority etc that was current when the thread terminated. More...
 
virtual PBoolean IsTerminated () const
 Determine if the thread has been terminated or ran to completion. More...
 
void WaitForTermination () const
 Block and wait for the thread to terminate. More...
 
PBoolean WaitForTermination (const PTimeInterval &maxWait) const
 Block and wait for the thread to terminate. More...
 
virtual void Suspend (PBoolean susp=true)
 Suspend or resume the thread. More...
 
virtual void Resume ()
 Resume thread execution, this is identical to Suspend(false). More...
 
virtual PBoolean IsSuspended () const
 Determine if the thread is currently suspended. More...
 
virtual void SetPriority (Priority priorityLevel)
 Set the priority of the thread relative to other threads in the current process. More...
 
virtual Priority GetPriority () const
 Get the current priority of the thread in the current process. More...
 
virtual void SetAutoDelete (AutoDeleteFlag deletion=AutoDeleteThread)
 Set the flag indicating thread object is to be automatically deleted when the thread ends. More...
 
void SetNoAutoDelete ()
 Reet the flag indicating thread object is to be automatically deleted when the thread ends. More...
 
virtual PString GetThreadName () const
 Get the name of the thread. More...
 
virtual void SetThreadName (const PString &name)
 Change the name of the thread. More...
 
 PPROFILE_EXCLUDE (PThreadIdentifier GetThreadId() const )
 
 PPROFILE_EXCLUDE (static PThreadIdentifier GetCurrentThreadId())
 
 PPROFILE_EXCLUDE (PUniqueThreadIdentifier GetUniqueIdentifier() const )
 
 PPROFILE_EXCLUDE (static PUniqueThreadIdentifier GetCurrentUniqueIdentifier())
 
 PPROFILE_EXCLUDE (static PINDEX GetTotalCount())
 
 PPROFILE_EXCLUDE (bool GetTimes(Times &times))
 
 PPROFILE_EXCLUDE (static bool GetTimes(PThreadIdentifier id, Times &times))
 
 PPROFILE_EXCLUDE (static void GetTimes(std::vector< Times > &times))
 
virtual void Main ()=0
 User override function for the main execution routine of the thread. More...
 
- Public Member Functions inherited from PObject
__inline unsigned GetTraceContextIdentifier () const
 Get PTRACE context identifier. More...
 
__inline void SetTraceContextIdentifier (unsigned id)
 
__inline void SetTraceContextIdentifier (const PObject &obj)
 
__inline void SetTraceContextIdentifier (const PObject *obj)
 
__inline void CopyTraceContextIdentifier (PObject &obj) const
 
__inline void CopyTraceContextIdentifier (PObject *obj) const
 
virtual ~PObject ()
 
__inline const char * GetClass () const
 
__inline bool IsClass (const char *name) const
 
__inline const PObjectPTraceObjectInstance () const
 
virtual PObjectClone () const
 Create a copy of the class on the heap. More...
 
template<class CLS >
CLS * CloneAs () const
 As for Clone() but converts to specified type. More...
 
virtual PINDEX HashFunction () const
 This function yields a hash value required by the PDictionary class. More...
 
virtual Comparison CompareObjectMemoryDirect (const PObject &obj) const
 Determine the byte wise comparison of two objects. More...
 
bool operator== (const PObject &obj) const
 Compare the two objects. More...
 
bool operator!= (const PObject &obj) const
 Compare the two objects. More...
 
bool operator< (const PObject &obj) const
 Compare the two objects. More...
 
bool operator> (const PObject &obj) const
 Compare the two objects. More...
 
bool operator<= (const PObject &obj) const
 Compare the two objects. More...
 
bool operator>= (const PObject &obj) const
 Compare the two objects. More...
 
virtual void ReadFrom (istream &strm)
 Input the contents of the object from the stream. More...
 

Static Public Member Functions

Operating System information functions
static PString GetOSClass ()
 Get the class of the operating system the process is running on, eg "unix". More...
 
static PString GetOSName ()
 Get the name of the operating system the process is running on, eg "Linux". More...
 
static PString GetOSHardware ()
 Get the hardware the process is running on, eg "sparc". More...
 
static PString GetOSVersion ()
 Get the version of the operating system the process is running on, eg "2.0.33". More...
 
static bool IsOSVersion (unsigned major, unsigned minor=0, unsigned build=0)
 See if operating system is later than the version specified. More...
 
static PDirectory GetOSConfigDir ()
 Get the configuration directory of the operating system the process is running on, eg "/etc" for Unix, "c:\windows" for Win95 or "c:\winnt\system32\drivers\etc" for NT. More...
 
static PString GetLibVersion ()
 Get the version of the PTLib library the process is running on, eg "2.5beta3". More...
 
- Static Public Member Functions inherited from PThread
static bool WaitAndDelete (PThread *&thread, const PTimeInterval &maxWait=10000, PMutex *mutex=NULL, bool lock=true)
 Wait for thread termination and delete object. More...
 
static void Sleep (const PTimeInterval &delay)
 Suspend the current thread for the specified amount of time. More...
 
static PString GetThreadName (PThreadIdentifier id)
 Get the name of the thread. More...
 
static PString GetCurrentThreadName ()
 Get the current threads name. More...
 
static PString GetIdentifiersAsString (PThreadIdentifier tid, PUniqueThreadIdentifier uid)
 Convert to thread identifers as a string. More...
 
static void GetTimes (std::list< Times > &times)
 
static void GetTimes (std::set< Times > &times)
 
static int GetPercentageCPU (Times &previousTimes, const PTimeInterval &period=PTimeInterval(0, 1), PThreadIdentifier id=PNullThreadIdentifier)
 Calculate the percentage CPU used over a period of time. More...
 
static unsigned GetNumProcessors ()
 Get number of processors, or processor cores, this machine has available. More...
 
static PThreadCurrent ()
 Get the currently running thread object instance. More...
 
static void Yield ()
 Yield to another thread without blocking. More...
 
static PThreadCreate (const PNotifier &notifier, INT parameter=0, AutoDeleteFlag deletion=AutoDeleteThread, Priority priorityLevel=NormalPriority, const PString &threadName=PString::Empty(), PINDEX stackSize=0)
 Create a simple thread executing the specified notifier. More...
 
static PThreadCreate (const PNotifier &notifier, const PString &threadName)
 
- Static Public Member Functions inherited from PObject
static __inline void CopyTraceContextIdentifier (PObject &to, const PObject &from)
 
static __inline void CopyTraceContextIdentifier (PObject &to, const PObject *from)
 
static __inline void CopyTraceContextIdentifier (PObject *to, const PObject &from)
 
static __inline void CopyTraceContextIdentifier (PObject *to, const PObject *from)
 
static __inline const char * Class ()
 
static __inline const PObjectPTraceObjectInstance (const char *)
 
static __inline const PObjectPTraceObjectInstance (const PObject *obj)
 
template<typename T >
static Comparison Compare2 (T v1, T v2)
 Compare two types, returning Comparison type. More...
 
static Comparison InternalCompareObjectMemoryDirect (const PObject *obj1, const PObject *obj2, PINDEX size)
 Internal function caled from CompareObjectMemoryDirect() More...
 

Protected Types

typedef std::map
< PThreadIdentifier, PThread * > 
ThreadMap
 
typedef std::list< PSharedPtr
< PExternalThread > > 
ThreadList
 
- Protected Types inherited from PThread
enum  Type { e_IsAutoDelete, e_IsManualDelete, e_IsProcess, e_IsExternal }
 

Protected Member Functions

void PlatformConstruct ()
 
void PlatformDestruct ()
 
void InternalThreadStarted (PThread *thread)
 
void InternalThreadEnded (PThread *thread)
 
void HouseKeeping ()
 
void InternalPostRunTimeSignal (int signal, PProcessIdentifier source)
 
void InternalHandleRunTimeSignal (const RunTimeSignalInfo &signalInfo)
 
 PDICTIONARY (PXFdDict, POrdinalKey, PThread)
 
- Protected Member Functions inherited from PObject
 PObject ()
 Constructor for PObject, made protected so cannot ever create one on its own. More...
 

Static Protected Member Functions

static PRunTimeSignalHandler PlatformSetRunTimeSignalHandler (int signal)
 
static void PlatformResetRunTimeSignalHandler (int signal, PRunTimeSignalHandler previous)
 

Protected Attributes

bool m_library
 
int m_terminationValue
 
PString m_manufacturer
 
PString m_productName
 
VersionInfo m_version
 
PFilePath m_executableFile
 
PStringArray m_configurationPaths
 
PArgList m_arguments
 
int m_maxHandles
 
PTime m_programStartTime
 
atomic< bool > m_shuttingDown
 
PCriticalSection m_threadMutex
 
ThreadMap m_activeThreads
 
ThreadList m_externalThreads
 
PSyncQueue< PThread * > m_autoDeleteThreads
 
atomic< bool > m_keepingHouse
 
PThreadm_houseKeeper
 
PSyncPoint m_signalHouseKeeper
 
PProcessIdentifier m_processID
 
std::vector
< PRunTimeSignalHandler > 
m_previousRunTimeSignalHandlers
 
std::vector< RunTimeSignalInfom_RunTimeSignalsQueueBuffer
 
size_t m_RunTimeSignalsQueueIn
 
size_t m_RunTimeSignalsQueueOut
 
PCriticalSection m_RunTimeSignalsQueueMutex
 
- Protected Attributes inherited from PThread
enum PThread::Type m_type
 
PINDEX m_originalStackSize
 
PString m_threadName
 
PCriticalSection m_threadNameMutex
 
PThreadIdentifier m_threadId
 
PUniqueThreadIdentifier m_uniqueId
 
- Protected Attributes inherited from PObject
unsigned m_traceContextIdentifier
 

Static Protected Attributes

static
POrdinalToString::Initialiser
const 
InternalSigNames []
 

Construction

enum  CodeStatus { AlphaCode, BetaCode, ReleaseCode, HotfixCode }
 Release status for the program. More...
 
 PProcess (const char *manuf="", const char *name="", unsigned majorVersion=1, unsigned minorVersion=0, CodeStatus status=ReleaseCode, unsigned patchVersion=1, bool library=false, bool suppressStartup=false, unsigned oemVersion=0)
 Create a new process instance. More...
 

Process information functions

void Startup ()
 Start up all items registered with PProcessStartupFactory. More...
 
bool GetAllThreadIdentifiers (std::vector< PThreadIdentifier > &identifiers)
 Return the operating system thread identifiers of all threads. More...
 
PThreadGetThread (PThreadIdentifier threadId) const
 Return the thread for the operating system thread identifier. More...
 
virtual void OnThreadStart (PThread &thread)
 Callback for when a thread is started by the PTLib system. More...
 
virtual void OnThreadEnded (PThread &thread)
 Callback for when a thread is ended if wqas started in the PTLib system. More...
 
virtual bool OnInterrupt (bool terminating)
 Callback for when a ^C (SIGINT), hangup (SIGHUP) or termination request (SIGTERM) is received by process. More...
 
void SetTerminationValue (int value)
 Set the termination value for the process. More...
 
int GetTerminationValue () const
 Get the termination value for the process. More...
 
PArgListGetArguments ()
 Get the programme arguments. More...
 
virtual const PStringGetManufacturer () const
 Get the name of the manufacturer of the software. More...
 
virtual const PStringGetName () const
 Get the name of the process. More...
 
virtual PString GetVersion (PBoolean full=true) const
 Get the version of the software. More...
 
const PFilePathGetFile () const
 Get the processes executable image file path. More...
 
PProcessIdentifier GetProcessID () const
 Get the platform dependent process identifier for the process. More...
 
bool IsMultipleInstance () const
 Indicate if this is the second, or more, instance of this executable. More...
 
PTime GetStartTime () const
 Return the time at which the program was started. More...
 
void GetMemoryUsage (MemoryUsage &usage) const
 Get process memory suage. More...
 
 PPROFILE_EXCLUDE (bool GetProcessTimes(Times &times) const )
 
 PPROFILE_EXCLUDE (static bool GetSystemTimes(Times &times))
 
PString GetUserName () const
 Get the effective user name of the owner of the process, eg "root" etc. More...
 
PBoolean SetUserName (const PString &username, PBoolean permanent=false)
 Set the effective owner of the process. More...
 
PDirectory GetHomeDirectory () const
 Get the "home" directory for the logged in user. More...
 
PString GetGroupName () const
 Get the effective group name of the owner of the process, eg "root" etc. More...
 
PBoolean SetGroupName (const PString &groupname, PBoolean permanent=false)
 Set the effective group of the process. More...
 
int GetMaxHandles () const
 Get the maximum file handle value for the process. More...
 
PBoolean SetMaxHandles (int newLimit)
 Set the maximum number of file handles for the process. More...
 
virtual PString GetConfigurationFile ()
 Get the default file to use in PConfig instances. More...
 
void SetConfigurationPath (const PString &path)
 Set the default file or set of directories to search for use in PConfig. More...
 
static PProcessCurrent ()
 Get the current processes object instance. More...
 
static PBoolean IsInitialised ()
 Determine if the current processes object instance has been initialised. More...
 
static PProcessIdentifier GetCurrentProcessID ()
 Get the platform dependent process identifier for the currentprocess. More...
 
virtual void AddRunTimeSignalHandlers (const int *signals=NULL)
 Add all the C run-time signal handlers. More...
 
virtual void RemoveRunTimeSignalHandlers ()
 Remove all the C run-time signal handlers. More...
 
virtual void AsynchronousRunTimeSignal (int signal, PProcessIdentifier source)
 Asynchronous C run-time signal handler, direct callback from OS. More...
 
virtual void HandleRunTimeSignal (const RunTimeSignalInfo &signalInfo)
 Synchronous C run-time signal handler, this is executed in the housekeeper thread. More...
 
virtual void HandleRunTimeSignal (int signal)
 
static const char * GetRunTimeSignalName (int signal)
 Get the name of the signal. More...
 

Detailed Description

This class represents an operating system process.

This is a running "programme" in the context of the operating system. Note that there can only be one instance of a PProcess class in a given programme.

The instance of a PProcess or its GUI descendent PApplication is usually a static variable created by the application writer. This is the initial "anchor" point for all data structures in an application. As the application writer never needs to access the standard system main() function, it is in the library, the programmes execution begins with the virtual function PThread::Main() on a process.

Member Typedef Documentation

typedef std::list< PSharedPtr<PExternalThread> > PProcess::ThreadList
protected
typedef std::map<PThreadIdentifier, PThread *> PProcess::ThreadMap
protected

Member Enumeration Documentation

Release status for the program.

Enumerator
AlphaCode 

Code is still very much under construction.

BetaCode 

Code is largely complete and is under test.

ReleaseCode 

Code has all known bugs removed and is shipping.

HotfixCode 

Code has been updated after shipping.

Constructor & Destructor Documentation

PProcess::PProcess ( const char *  manuf = "",
const char *  name = "",
unsigned  majorVersion = 1,
unsigned  minorVersion = 0,
CodeStatus  status = ReleaseCode,
unsigned  patchVersion = 1,
bool  library = false,
bool  suppressStartup = false,
unsigned  oemVersion = 0 
)

Create a new process instance.

Parameters
manufName of manufacturer
nameName of product
majorVersionMajor version number of the product
minorVersionMinor version number of the product
statusDevelopment status of the product
patchVersionPatch version number of the product
libraryPProcess is a library rather than an application
suppressStartupDo not execute Startup()
oemVersionOEM version number of the product
PProcess::~PProcess ( )

Member Function Documentation

virtual void PProcess::AddRunTimeSignalHandlers ( const int *  signals = NULL)
virtual

Add all the C run-time signal handlers.

Reimplemented in PServiceProcess.

virtual void PProcess::AsynchronousRunTimeSignal ( int  signal,
PProcessIdentifier  source 
)
virtual

Asynchronous C run-time signal handler, direct callback from OS.

Parameters
signalSignal number
sourceSource for signal, typically the PID of the sender

Reimplemented in PServiceProcess.

Comparison PProcess::Compare ( const PObject obj) const
virtual

Compare two process instances.

This should almost never be called as a programme only has access to a single process, its own.

Returns
EqualTo if the two process object have the same name.
Parameters
objOther process to compare against.

Reimplemented from PObject.

static PProcess& PProcess::Current ( )
static

Get the current processes object instance.

The current process is the one the application is running in.

Returns
pointer to current process instance.
bool PProcess::GetAllThreadIdentifiers ( std::vector< PThreadIdentifier > &  identifiers)

Return the operating system thread identifiers of all threads.

Note, this only returns the threads that PTLib knows about. Typically as it was created using a PThread. Also the thread could disappear at any moment and the individual identifier no longer be valid. true if there are identifiers available.

Parameters
identifiersReturned identifiers
PArgList& PProcess::GetArguments ( )

Get the programme arguments.

Programme arguments are a set of strings provided to the programme in a platform dependent manner.

Returns
argument handling class instance.
virtual PString PProcess::GetConfigurationFile ( )
virtual

Get the default file to use in PConfig instances.

static PProcessIdentifier PProcess::GetCurrentProcessID ( )
static

Get the platform dependent process identifier for the currentprocess.

This is an arbitrary (and unique) integer attached to a process by the operating system.

Returns
Process ID for current process.
const PFilePath& PProcess::GetFile ( ) const

Get the processes executable image file path.

Returns
file path for program.
PString PProcess::GetGroupName ( ) const

Get the effective group name of the owner of the process, eg "root" etc.

This is a platform dependent string only provided by platforms that are multi-user. Note that some value may be returned as a "simulated" user. For example, in MS-DOS an environment variable

Returns
group name of processes owner.
PDirectory PProcess::GetHomeDirectory ( ) const

Get the "home" directory for the logged in user.

This checke dthe environment variable HOME first, and if not set tries to determine the home directory in a platform dependent manner.

static PString PProcess::GetLibVersion ( )
static

Get the version of the PTLib library the process is running on, eg "2.5beta3".

Returns
String for library version.
virtual const PString& PProcess::GetManufacturer ( ) const
virtual

Get the name of the manufacturer of the software.

This is used in the default "About" dialog box and for determining the location of the configuration information as used by the PConfig class.

The default for this information is the empty string.

Returns
string for the manufacturer name eg "Equivalence".
int PProcess::GetMaxHandles ( ) const

Get the maximum file handle value for the process.

For some platforms this is meaningless.

Returns
user name of processes owner.
void PProcess::GetMemoryUsage ( MemoryUsage usage) const

Get process memory suage.

virtual const PString& PProcess::GetName ( ) const
virtual

Get the name of the process.

This is used in the default "About" dialog box and for determining the location of the configuration information as used by the PConfig class.

The default is the title part of the executable image file.

Returns
string for the process name eg "MyApp".
static PString PProcess::GetOSClass ( )
static

Get the class of the operating system the process is running on, eg "unix".

Returns
String for OS class.
static PDirectory PProcess::GetOSConfigDir ( )
static

Get the configuration directory of the operating system the process is running on, eg "/etc" for Unix, "c:\windows" for Win95 or "c:\winnt\system32\drivers\etc" for NT.

Returns
Directory for OS configuration files.
static PString PProcess::GetOSHardware ( )
static

Get the hardware the process is running on, eg "sparc".

Returns
String for OS name.
static PString PProcess::GetOSName ( )
static

Get the name of the operating system the process is running on, eg "Linux".

Returns
String for OS name.
static PString PProcess::GetOSVersion ( )
static

Get the version of the operating system the process is running on, eg "2.0.33".

Returns
String for OS version.
PProcessIdentifier PProcess::GetProcessID ( ) const
inline

Get the platform dependent process identifier for the process.

This is an arbitrary (and unique) integer attached to a process by the operating system.

Returns
Process ID for process.

References m_processID.

static const char* PProcess::GetRunTimeSignalName ( int  signal)
static

Get the name of the signal.

PTime PProcess::GetStartTime ( ) const

Return the time at which the program was started.

int PProcess::GetTerminationValue ( ) const

Get the termination value for the process.

The termination value is an operating system dependent integer which indicates the processes termiantion value. It can be considered a "return value" for an entire programme.

Returns
integer termination value.
PThread* PProcess::GetThread ( PThreadIdentifier  threadId) const

Return the thread for the operating system thread identifier.

Note, the return value is very dangerous to use as, under some circumstances, it may be deleted at any moment. For example, if the thread is an AutoDeleteThread mode.

Parameters
threadIdIdentifier if thread to get
PString PProcess::GetUserName ( ) const

Get the effective user name of the owner of the process, eg "root" etc.

This is a platform dependent string only provided by platforms that are multi-user. Note that some value may be returned as a "simulated" user. For example, in MS-DOS an environment variable

Returns
user name of processes owner.
virtual PString PProcess::GetVersion ( PBoolean  full = true) const
virtual

Get the version of the software.

This is used in the default "About" dialog box and for determining the location of the configuration information as used by the PConfig class.

If the full parameter is true then a version string built from the major, minor, status and build veriosn codes is returned. If false then only the major and minor versions are returned.

The default for this information is "1.0".

Returns
string for the version eg "1.0b3".
Parameters
fulltrue for full version, false for short version.
virtual void PProcess::HandleRunTimeSignal ( const RunTimeSignalInfo signalInfo)
virtual

Synchronous C run-time signal handler, this is executed in the housekeeper thread.

virtual void PProcess::HandleRunTimeSignal ( int  signal)
virtual

Reimplemented in PServiceProcess.

void PProcess::HouseKeeping ( )
protected
void PProcess::InternalHandleRunTimeSignal ( const RunTimeSignalInfo signalInfo)
protected
virtual int PProcess::InternalMain ( void *  arg = NULL)
virtual

Main function for process, called from real main after initialisation.

Reimplemented in PServiceProcess.

void PProcess::InternalPostRunTimeSignal ( int  signal,
PProcessIdentifier  source 
)
protected
void PProcess::InternalThreadEnded ( PThread thread)
protected
void PProcess::InternalThreadStarted ( PThread thread)
protected
static PBoolean PProcess::IsInitialised ( )
static

Determine if the current processes object instance has been initialised.

If this returns true it is safe to use the PProcess::Current() function.

Returns
true if process class has been initialised.
bool PProcess::IsMultipleInstance ( ) const

Indicate if this is the second, or more, instance of this executable.

static bool PProcess::IsOSVersion ( unsigned  major,
unsigned  minor = 0,
unsigned  build = 0 
)
static

See if operating system is later than the version specified.

Returns
true if OS version leter than or equal to parameters.
Parameters
majorMajor version number
minorMinor version number
buildBuild number
virtual bool PProcess::IsServiceProcess ( ) const
virtual

Reimplemented in PServiceProcess.

virtual bool PProcess::OnInterrupt ( bool  terminating)
virtual

Callback for when a ^C (SIGINT), hangup (SIGHUP) or termination request (SIGTERM) is received by process.

Note this function is called asynchronously and there may be many limitations on what can and cannot be done depending on the underlying operating system. It is recommeneded that this does no more than set flags and return.

Default behaviour returns false and the process is killed.

Returns
true if the process is to be allowed to continue, false otherwise.
Parameters
terminatingtrue if process terminating.
virtual void PProcess::OnThreadEnded ( PThread thread)
virtual

Callback for when a thread is ended if wqas started in the PTLib system.

Note this is called in the context of the old thread.

virtual void PProcess::OnThreadStart ( PThread thread)
virtual

Callback for when a thread is started by the PTLib system.

Note this is called in the context of the new thread.

PProcess::PDICTIONARY ( PXFdDict  ,
POrdinalKey  ,
PThread   
)
protected
void PProcess::PlatformConstruct ( )
protected
void PProcess::PlatformDestruct ( )
protected
static void PProcess::PlatformResetRunTimeSignalHandler ( int  signal,
PRunTimeSignalHandler  previous 
)
staticprotected
static PRunTimeSignalHandler PProcess::PlatformSetRunTimeSignalHandler ( int  signal)
staticprotected
PProcess::PPROFILE_EXCLUDE ( bool GetProcessTimes(Times &times)  const)
Parameters
constGet the process execution times.
PProcess::PPROFILE_EXCLUDE ( static bool   GetSystemTimesTimes &times)
Parameters
GetSystemTimesGet the system execution times.
void PProcess::PreInitialise ( int  argc,
char **  argv 
)

Internal initialisation function called directly from InternalMain().

The user should never call this function.

virtual void PProcess::PrintOn ( ostream &  strm) const
virtual

This will print out performance indicators for the process.

Includes CPU, Memory, Threads & High water marks for various resources.

Reimplemented from PObject.

virtual void PProcess::RemoveRunTimeSignalHandlers ( )
virtual

Remove all the C run-time signal handlers.

void PProcess::SetConfigurationPath ( const PString path)

Set the default file or set of directories to search for use in PConfig.

To find the .ini file for use in the default PConfig() instance, this explicit filename is used, or if it is a set of directories separated by either ':' or ';' characters, depending on platform, then the application base name postfixed with ".ini" is searched for through those directories.

The search is actually done when the GetConfigurationFile() is called, this function only sets the internal variable.

Note for Windows, a path beginning with "HKEY_LOCAL_MACHINE\\" or "HKEY_CURRENT_USER\\" will actually search teh system registry for the application base name only (no ".ini") in that folder of the registry.

Parameters
pathExplicit file or set of directories
PBoolean PProcess::SetGroupName ( const PString groupname,
PBoolean  permanent = false 
)

Set the effective group of the process.

This is a platform dependent string only provided by platforms that are multi-user.

For unix systems if the groupname may consist exclusively of digits and there is no actual groupname consisting of that string then the numeric uid value is used. For example "0" is the superuser. For the rare occassions where the groups name is the same as their uid, if the groupname field starts with a '#' then the numeric form is forced.

If an empty string is provided then original group that executed the process in the first place (the real group) is set as the effective group.

The permanent flag indicates that the group will not be able to simply change back to the original group as indicated above, ie for unix systems setgid() is used instead of setegid(). This is not necessarily meaningful for all platforms.

Returns
true if processes group changed. The most common reason for failure is that the process does not have the privilege to change the effective group.
Parameters
groupnameNew group name or gid
permanentFlag for if effective or real group
PBoolean PProcess::SetMaxHandles ( int  newLimit)

Set the maximum number of file handles for the process.

For unix systems the user must be run with the approriate privileges before this function can set the value above the system limit.

For some platforms this is meaningless.

Returns
true if successfully set the maximum file hadles.
Parameters
newLimitNew limit on file handles
void PProcess::SetTerminationValue ( int  value)

Set the termination value for the process.

The termination value is an operating system dependent integer which indicates the processes termiantion value. It can be considered a "return value" for an entire programme.

Parameters
valueValue to return a process termination status.
PBoolean PProcess::SetUserName ( const PString username,
PBoolean  permanent = false 
)

Set the effective owner of the process.

This is a platform dependent string only provided by platforms that are multi-user.

For unix systems if the username may consist exclusively of digits and there is no actual username consisting of that string then the numeric uid value is used. For example "0" is the superuser. For the rare occassions where the users name is the same as their uid, if the username field starts with a '#' then the numeric form is forced.

If an empty string is provided then original user that executed the process in the first place (the real user) is set as the effective user.

The permanent flag indicates that the user will not be able to simple change back to the original user as indicated above, ie for unix systems setuid() is used instead of seteuid(). This is not necessarily meaningful for all platforms.

Returns
true if processes owner changed. The most common reason for failure is that the process does not have the privilege to change the effective user.
Parameters
usernameNew user name or uid
permanentFlag for if effective or real user
bool PProcess::SignalTimerChange ( )
void PProcess::Startup ( )

Start up all items registered with PProcessStartupFactory.

virtual void PProcess::Terminate ( )
virtual

Terminate the process.

Usually only used in abnormal abort situation.

Reimplemented from PThread.

Member Data Documentation

POrdinalToString::Initialiser const PProcess::InternalSigNames[]
staticprotected
ThreadMap PProcess::m_activeThreads
protected
PArgList PProcess::m_arguments
protected
PSyncQueue<PThread*> PProcess::m_autoDeleteThreads
protected
PStringArray PProcess::m_configurationPaths
protected
PFilePath PProcess::m_executableFile
protected
ThreadList PProcess::m_externalThreads
protected
PThread* PProcess::m_houseKeeper
protected
atomic<bool> PProcess::m_keepingHouse
protected
bool PProcess::m_library
protected
PString PProcess::m_manufacturer
protected
int PProcess::m_maxHandles
protected
std::vector<PRunTimeSignalHandler> PProcess::m_previousRunTimeSignalHandlers
protected
PProcessIdentifier PProcess::m_processID
protected

Referenced by GetProcessID().

PString PProcess::m_productName
protected
PTime PProcess::m_programStartTime
protected
std::vector<RunTimeSignalInfo> PProcess::m_RunTimeSignalsQueueBuffer
protected
size_t PProcess::m_RunTimeSignalsQueueIn
protected
PCriticalSection PProcess::m_RunTimeSignalsQueueMutex
protected
size_t PProcess::m_RunTimeSignalsQueueOut
protected
atomic<bool> PProcess::m_shuttingDown
protected
PSyncPoint PProcess::m_signalHouseKeeper
protected
int PProcess::m_terminationValue
protected
PCriticalSection PProcess::m_threadMutex
protected
VersionInfo PProcess::m_version
protected

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