# Module Lwt_daemon

    module Lwt_daemon: sig .. end

Daemon helpers

    val daemonize : ?syslog:bool ->
           ?stdin:[ `Close | `Dev_null | `Keep ] ->
           ?stdout:[ `Close | `Dev_null | `Keep | `Log of Lwt_log.logger | `Log_default ] ->
           ?stderr:[ `Close | `Dev_null | `Keep | `Log of Lwt_log.logger | `Log_default ] ->
           ?directory:string -> ?umask:[ `Keep | `Set of int ] -> unit -> unit

Put the current running process into daemon mode. I.e. it forks and exit the parent, detach it from its controlling terminal, and redict standard intputs/outputs..

Notes:

- if the process is already a daemon, it does nothing.
- you must be sure that there is no pending threads when calling this function, otherwise they may be canceled.

If `syslog` is `true` (the default), then `Lwt_log.default` is set to `Lwt_log.syslog ~facility:`Daemon ()`, otherwise it is kept unchanged.

`stdin` is one of:

- ``Dev_null` which means that `Unix.stdin` is reopened as `/dev/null`, this is the default behavior
- ``Close` means that `Unix.stdin` is simply closed
- ``Keep` means that `Unix.stdin` is left unchanged

`stdout` and `stderr` control how the two associated file descriptors are redirected:

- ``Dev_null` means that the output is redirected to `/dev/null`
- ``Close` means that the file descriptor is closed
- ``Keep` means that it is left unchanged
- ``Log logger` means that the output is redirected to this logger
- ``Log_default` means that the output is redirected to the default logger

Both `stdout` and `stderr` defaults to ``Log_default`.

Warning: do not redirect an output to a logger logging into this outpout, for example this code will create an infinite loop:

            let logger = Lwt_log.channel ~close_mode:`Keep ~channel:Lwt_io.stderr () in

            Lwt_daemon.daemonize ~syslog:false ~stderr:(`Log logger) ();

            prerr_endline "foo"

The current working directory is set to `directory`, which defaults to `"/"`.

`umask` may be one of:

- ``Keep` which means that the umask is left unchanged
- ``Set n` which means that the umash is set to `n`

It defaults to ``Set 0o022`.