The System Monitor (SysMon) provides a Process Monitor and Restart service. Its clients are typically the System Starter and After Market Starter which use information in static and dynamic startup configurations (SSC & DSC) to set the restart parameters.
An application or process may also add itself to the System Monitor's list.
Use of the System Monitor API is restricted by capabilites of the client:
WriteDeviceData is required to request a process restart,
ProtServ is required to request an OS restart into Normal mode
PowerMgmt is required to request a restart into Startup mode
The system monitor API is simple and self explanatory. A client must instantiate an RSysMonSession, connect to the SysMon server and open [the session].
// sysmonclisess.h // // Copyright (c) 2006 Symbian Software Ltd. All rights reserved. // #include <e32std.h> #include <e32base.h> #include <startupproperties.h> #include "startup.hrh" class RSysMonSession : public RSessionBase { public: IMPORT_C TInt Open() ; IMPORT_C void Close() ; IMPORT_C TInt MonitorL(CStartupProperties& aStartupProperties, RProcess& aProcess) ; IMPORT_C TInt MonitorSelfL(CStartupProperties& aStartupProperties) ; IMPORT_C TInt CancelMonitorSelf() ; } ;
Monitoring is started with a call to MonitorL() or MonitorSelfL(). Before calling one of these functions, however, a CStartupProperties object must be created and populated with the desired monitoring and restart configuration.
CStartupProperties has a series of Set...() functions which are used to determine the monitoring and restart behaviour for the application or process to be monitored. It has a version number (returned by the Version() function) as it is designed to remain compatible with future Symbian extensions.
The following snippet shows how a process might add itself to SysMon, specifying that it should be restarted in the event of failure and that, if it cannot be restarted, the device should be rebooted.
... // Add this application to SysMon. // (Note that this is normally done by SysStart or AmaStarter using information in an SSC or DSC.) RSysMonSession sysMon ; TInt err = sysMon.Connect() ; // handle error err = sysMon.Open() ; // handle error _LIT( KFileName, "Z:\\sys\\bin\\myServ.exe" ) ; _LIT( KRestartArg, "-restart" ) ; CStartupProperties startupProperties = CStartupProperties::NewLC( KFileName, KRestartArg ) ; startupProperties->SetStartupType( EStartProcess) ; // TStartupType startupProperties->SetStartMethod( EWaitForStart ) ; // TStartMethod startupProperties->SetNumberOfRetries( KRetryCount ) ; startupProperties->SetTimeout( KRestartTimeout ) ; // timeout in milliseconds startupProperties->SetRecoveryParams( ERestartOS , KNormalMode ) ; // TRecoveryMethod, modes are device specific startupProperties->SetMonitored( ETrue ) ; // montoring enabled startupProperties->SetViewless( ETrue ) ; startupProperties->SetStartInBackground( ETrue ) ; err = sysMon.MonitorSelfL( *startupProperties ) ; // handle error CleanupStack::PopAndDestroy( startupProperties ) ; sysMon.Close() ; ...
Setting up Monitoring in an SSC
Process monitoring is normally configured for processes and applications using START_PROCESS_INFO2 and START_APP_INFO2 resources in an SSC. These are defined in sysstart.rh.
Note that these structures add monitor, startup mode and a localisable error message to START_PROCESS_INFO and START_APP_INFO.
STRUCT START_PROCESS_INFO2 // For starting processes { WORD type = EStartupProcess2; // do not change LTEXT path = ""; // VALUE REQUIRED LTEXT args = ""; // Passed to the command line of the started process WORD start_method = EFireAndForget; // can also be EWaitForStart or EDeferredWaitForStart LONG timeout = 0; // In milliseconds only used for EWaitForStart WORD retry_failure_recovery_method = ERestartOS; // can be EIgnoreCommandFailure WORD no_of_retries_on_failure = 0; // only used for EWaitForStart WORD monitor = 0; // can be 1 if monitoring required WORD retry_failure_recovery_startup_mode = -1; LTEXT localisable_resource_file=""; LONG localisable_resource_id=0; // used when fail_on_error= EinformUserOnFailure }
STRUCT START_APP_INFO2 // For starting apps { WORD type = EStartupApp2; // do not change LTEXT path = ""; // VALUE REQUIRED LTEXT args = ""; // Ignored WORD start_method = EFireAndForget; // can also be EWaitForStart or EDeferredWaitForStart WORD viewless = 0; // can be 1 WORD start_in_background = 0; // can be 1 LONG timeout = 0; // In milliseconds only used for EWaitForStart WORD retry_failure_recovery_method = ERestartOS; // can be EIgnoreCommandFailure WORD no_of_retries_on_failure = 0; // only used for EWaitForStart WORD monitor = 0; // can be 1 if monitoring required WORD retry_failure_recovery_startup_mode = -1; LTEXT localisable_resource_file=""; LONG localisable_resource_id=0; // used when fail_on_error= EinformUserOnFailure }
Setting up Monitoring in a DSC
Aftermarket components started at boot using a Dynamic Startup Configuration (DSC) may also be monitored and restarted by SysMon. The DSC API uses CStartupProperties in the manner described above. An AMC may be restarted on failure but it will not be permitted to reboot the device.
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.