hop-2012/server/thirdparty/lwt-2.3.2/src/unix/lwt_daemon.mli

82 lines
3.2 KiB
OCaml

(* Lightweight thread library for Objective Caml
* http://www.ocsigen.org/lwt
* Interface Lwt_io
* Copyright (C) 2009 Jérémie Dimino
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, with linking exceptions;
* either version 2.1 of the License, or (at your option) any later
* version. See COPYING file for details.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*)
(** Daemon helpers *)
val daemonize :
?syslog : bool ->
?stdin : [ `Dev_null | `Close | `Keep ] ->
?stdout : [ `Dev_null | `Close | `Keep | `Log_default | `Log of Lwt_log.logger ] ->
?stderr : [ `Dev_null | `Close | `Keep | `Log_default | `Log of Lwt_log.logger ] ->
?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].
*)