module Daemon: Daemonmodule Fd_redirection:sig..end
val daemonize : ?redirect_stdout:Fd_redirection.t ->
       ?redirect_stderr:Fd_redirection.t ->
       ?cd:string -> ?umask:int -> unit -> unitdaemonize makes the executing process a daemon.
See Chapter 13 of Advanced Programming in the UNIX Environment Second Edition by Stephens and Rago for more details.
    The optional arguments have defaults as per daemonize_wait, below.
    By default, output sent to stdout and stderr after daemonization will be silently
    eaten.  This behaviour may be adjusted by using redirect_stdout and
    redirect_stderr.  See the documentation for daemonize_wait below.
Raises Failure if fork was unsuccessful.
val daemonize_wait : ?redirect_stdout:Fd_redirection.t ->
       ?redirect_stderr:Fd_redirection.t ->
       ?cd:string -> ?umask:int -> unit -> (unit -> unit) Staged.tdaemonize_wait makes the executing process a daemon, but delays full detachment
    from the calling shell/process until the returned "release" closure is called.
    Any output to stdout/stderr before the "release" closure is called will get
    sent out normally.  After "release" is called, stdin is connected to /dev/null,
    and stdout and stderr are connected as specified by redirect_stdout and
    redirect_stderr.  The default is the usual behaviour whereby both of these
    descriptors are connected to /dev/null.
    Note that calling release will adjust SIGPIPE handling, so you should not rely on
    the delivery of this signal during this time.
    daemonize_wait allows you to daemonize and then start async, but still have
    stdout/stderr go to the controlling terminal during startup.  By default, when you
    daemonize, toplevel exceptions during startup would get sent to /dev/null.  With
    daemonize_wait, toplevel exceptions can go to the terminal until you call release.
Raises Failure if fork was unsuccessful.