/** Flags passed to the daemon helper. **/
enum daemon_flags {
DAEMON_FLAG_PRESERVE_CWD = 1, // Skip chdir("/")
+ DAEMON_FLAG_SIMULATE = 2, // Simulate daemonization (avoid fork etc.)
};
/**
* a new process and does all necessary setup. Inside the new process, it calls
* @body (and when it returns, it exits the process). In the original process, it writes
* the PID file and returns.
+ *
+ * When `DAEMON_FLAG_SIMULATE` is set, it justs calls @body. This is useful
+ * for running of daemons in a debugger.
**/
void daemon_run(struct daemon_params *dp, void (*body)(struct daemon_params *dp));
* * `DAEMON_STATUS_NOT_RUNNING` if the action failed, because the daemon is not running
* * `DAEMON_STATUS_ERROR` if the action failed for some other reason (in this case,
* `dc->error_msg` contains a full error message)
+ * * `DAEMON_STATUS_STALE` if the daemon was in an undefined state (e.g., a stale PID file);
+ * for `DAEMON_CONTROL_START`, it means success
**/
enum daemon_control_status daemon_control(struct daemon_control_params *dc);
+// XXX: Also used as exit codes of the daemon-control utility.
enum daemon_control_status {
DAEMON_STATUS_OK = 0,
DAEMON_STATUS_ALREADY_DONE = 100,
DAEMON_STATUS_NOT_RUNNING = 101,
DAEMON_STATUS_ERROR = 102,
+ DAEMON_STATUS_STALE = 103,
};
#endif