class wrench::S4U_Daemon

A generic “running daemon” abstraction that serves as a basis for all simulated processes.

Subclassed by wrench::Service

Public Types

enum State

Daemon states.


enumerator UP

UP state: the daemon has been started and is still running.

enumerator DOWN

DOWN state: the daemon has been shutdown and/or has terminated.

enumerator SUSPENDED

SUSPENDED state: the daemon has been suspended (and hopefully will be resumed0.

Public Functions

S4U_Daemon(std::string hostname, std::string process_name_prefix)

Constructor (daemon with a mailbox)

  • hostname – the name of the host on which the daemon will run

  • process_name_prefix – the prefix of the name of the simulated process/actor

void acquireDaemonLock()

Method to acquire the daemon’s lock.

Lock the daemon’s lock.

virtual void cleanup(bool has_returned_from_main, int return_value)

Cleanup function called when the daemon terminates (for whatever reason). The default behavior is to throw an exception if the host is off. This method should be overriden in a daemons implements some fault-tolerant behavior, or is naturally tolerant.

  • has_returned_from_main – whether the daemon returned from main() by itself

  • return_value – the return value from main (if has_terminated_cleanly is true)



void createLifeSaver(std::shared_ptr<S4U_Daemon> reference)

Create a life saver for the daemon.



std::string getName()

Retrieve the process name.


the name

int getReturnValue()

Returns the value returned by main() (if the daemon has returned from main)


The return value

Simulation *getSimulation()

Get the service’s simulation.


a simulation

S4U_Daemon::State getState()

Get the daemon’s state.


a state

bool hasReturnedFromMain()

Returns true if the daemon has returned from main() (i.e., not brutally killed)


The true or false

bool isDaemonized()

Return the daemonized status of the daemon.


true or false

bool isSetToAutoRestart()

Return the auto-restart status of the daemon.


true or false

std::pair<bool, int> join()

Join (i.e., wait for) the daemon.


a pair <A,B> where A is boolean (true if the daemon terminated cleanly (i.e., main() returned), or false otherwise) and B is the int returned from main() (if main returned).

virtual int main() = 0

The daemon’s main method, to be overridden.


0 on success, non-0 on failure!

void releaseDaemonLock()

Method to release the daemon’s lock.

Unlock the daemon’s lock.

void resumeActor()

Resume the daemon/actor.

void setSimulation(Simulation *simulation)

Set the service’s simulation.


simulation – a simulation

void setupOnExitFunction()

Sets up the on_exit function for the actor.

void startDaemon(bool _daemonized, bool _auto_restart)

Start the daemon.

  • daemonized – whether the S4U actor should be daemonized

  • auto_restart – whether the S4U actor should automatically restart after a host reboot

  • std::runtime_error

  • std::shared_ptr<HostError>

void suspendActor()

Suspend the daemon/actor.

Public Members

std::string hostname

The name of the host on which the daemon is running.

LifeSaver *life_saver = nullptr

The daemon’s life saver.

simgrid::s4u::Mailbox *mailbox

The daemon’s mailbox.

std::string process_name

The name of the daemon.

simgrid::s4u::Mailbox *recv_mailbox

The daemon’s receive mailbox (to send to another daemon so that that daemon can reply)

Public Static Functions

static simgrid::s4u::Mailbox *getRunningActorRecvMailbox()

Return the running actor’s recv mailbox.


the mailbox

Public Static Attributes

static std::unordered_map<aid_t, simgrid::s4u::Mailbox*> map_actor_to_recv_mailbox

A convenient map between actors and their default receive mailboxes.