<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <link rel="stylesheet" href="style.css" type="text/css"> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> <link rel="Start" href="index.html"> <link rel="previous" href="Signal.html"> <link rel="next" href="Std.html"> <link rel="Up" href="index.html"> <link title="Index of types" rel=Appendix href="index_types.html"> <link title="Index of exceptions" rel=Appendix href="index_exceptions.html"> <link title="Index of values" rel=Appendix href="index_values.html"> <link title="Index of modules" rel=Appendix href="index_modules.html"> <link title="Index of module types" rel=Appendix href="index_module_types.html"> <link title="Async_print" rel="Chapter" href="Async_print.html"> <link title="Async_sys" rel="Chapter" href="Async_sys.html"> <link title="Epoll_file_descr_watcher" rel="Chapter" href="Epoll_file_descr_watcher.html"> <link title="Fd" rel="Chapter" href="Fd.html"> <link title="Fd_by_descr" rel="Chapter" href="Fd_by_descr.html"> <link title="File_descr_watcher_intf" rel="Chapter" href="File_descr_watcher_intf.html"> <link title="Import" rel="Chapter" href="Import.html"> <link title="Interruptor" rel="Chapter" href="Interruptor.html"> <link title="In_thread" rel="Chapter" href="In_thread.html"> <link title="Io_stats" rel="Chapter" href="Io_stats.html"> <link title="Process" rel="Chapter" href="Process.html"> <link title="Raw_fd" rel="Chapter" href="Raw_fd.html"> <link title="Raw_scheduler" rel="Chapter" href="Raw_scheduler.html"> <link title="Raw_signal_manager" rel="Chapter" href="Raw_signal_manager.html"> <link title="Reader" rel="Chapter" href="Reader.html"> <link title="Read_write" rel="Chapter" href="Read_write.html"> <link title="Scheduler" rel="Chapter" href="Scheduler.html"> <link title="Select_file_descr_watcher" rel="Chapter" href="Select_file_descr_watcher.html"> <link title="Shutdown" rel="Chapter" href="Shutdown.html"> <link title="Signal" rel="Chapter" href="Signal.html"> <link title="Signal_manager" rel="Chapter" href="Signal_manager.html"> <link title="Std" rel="Chapter" href="Std.html"> <link title="Syscall" rel="Chapter" href="Syscall.html"> <link title="Thread_pool" rel="Chapter" href="Thread_pool.html"> <link title="Thread_safe" rel="Chapter" href="Thread_safe.html"> <link title="Thread_safe_pipe" rel="Chapter" href="Thread_safe_pipe.html"> <link title="Unix_syscalls" rel="Chapter" href="Unix_syscalls.html"> <link title="Writer" rel="Chapter" href="Writer.html"><title>Signal_manager</title> </head> <body> <div class="navbar"><a class="pre" href="Signal.html" title="Signal">Previous</a> <a class="up" href="index.html" title="Index">Up</a> <a class="post" href="Std.html" title="Std">Next</a> </div> <h1>Module <a href="type_Signal_manager.html">Signal_manager</a></h1> <pre><span class="keyword">module</span> Signal_manager: <code class="code">sig</code> <a href="Signal_manager.html">..</a> <code class="code">end</code></pre><div class="info module top"> A signal manager keeps track of a set of signals to be managed and the signal handlers for them. When a signal manager is managing a signal, it installs its own OCaml handler for that signal that records delivery of the signal. It then later, upon request, will deliver the signal to all its handlers. <p> Once a signal manager starts managing a signal, it never stops.<br> </div> <hr width="100%"> <pre><span id="TYPEt"><span class="keyword">type</span> <code class="type"></code>t</span> </pre> <pre><span class="keyword">include</span> Invariant.S</pre> <pre><span id="VALcreate"><span class="keyword">val</span> create</span> : <code class="type">thread_safe_notify_signal_delivered:(unit -> unit) -> <a href="Signal_manager.html#TYPEt">t</a></code></pre><div class="info "> <code class="code">create</code> creates and returns a signal manager <code class="code">t</code>. Whenever a signal that <code class="code">t</code> is managing is delivered, it will call <code class="code">thread_safe_notify_signal_delivered</code> from within the OCaml signal handler. Therefore <code class="code">thread_safe_notify_signal_delivered</code> must be thread safe.<br> </div> <pre><span id="VALmanage"><span class="keyword">val</span> manage</span> : <code class="type"><a href="Signal_manager.html#TYPEt">t</a> -> Core.Std.Signal.t -> unit</code></pre><div class="info "> <code class="code">manage t signal</code> causes <code class="code">t</code> to manage <code class="code">signal</code>, thus overriding <code class="code">default_sys_behavior</code> for that signal, and any other OCaml handler for that signal.<br> </div> <pre><span id="VALis_managing"><span class="keyword">val</span> is_managing</span> : <code class="type"><a href="Signal_manager.html#TYPEt">t</a> -> Core.Std.Signal.t -> bool</code></pre><div class="info "> <code class="code">is_managing t signal</code> returns true iff <code class="code">manage t signal</code> has been called<br> </div> <pre><span id="TYPEhandler"><span class="keyword">type</span> <code class="type"></code>handler</span> </pre> <div class="info "> <code class="code">install_handler t signals f</code> causes <code class="code">t</code> to manage the handling of <code class="code">signals</code>, and registers <code class="code">f</code> to run on every signal in <code class="code">signals</code> that is delivered. It is an error if <code class="code">f</code> ever raises when it is called.<br> </div> <pre><span id="VALinstall_handler"><span class="keyword">val</span> install_handler</span> : <code class="type"><a href="Signal_manager.html#TYPEt">t</a> -><br> Core.Std.Signal.t list -><br> (Core.Std.Signal.t -> unit) -> <a href="Signal_manager.html#TYPEhandler">handler</a></code></pre> <pre><span id="VALremove_handler"><span class="keyword">val</span> remove_handler</span> : <code class="type"><a href="Signal_manager.html#TYPEt">t</a> -> <a href="Signal_manager.html#TYPEhandler">handler</a> -> unit</code></pre><div class="info "> <code class="code">remove_handler handler</code> causes the particular <code class="code">handler</code> to no longer handle the signals it was registered to handle. The signal manager continues to manage those signals, i.e. the OCaml signal handler remains installed, whether or not they still have handlers.<br> </div> <pre><span id="VALhandle_delivered"><span class="keyword">val</span> handle_delivered</span> : <code class="type"><a href="Signal_manager.html#TYPEt">t</a> -> unit</code></pre><div class="info "> <code class="code">handle_delivered t</code> runs all signal handlers on the signals that have been delivered but not yet handled.<br> </div> <pre><span id="VALsexp_of_t"><span class="keyword">val</span> sexp_of_t</span> : <code class="type"><a href="Signal_manager.html#TYPEt">t</a> -> Sexplib.Sexp.t</code></pre><br> <code class="code">create</code> creates and returns a signal manager <code class="code">t</code>. Whenever a signal that <code class="code">t</code> is managing is delivered, it will call <code class="code">thread_safe_notify_signal_delivered</code> from within the OCaml signal handler. Therefore <code class="code">thread_safe_notify_signal_delivered</code> must be thread safe.<br> <br> <code class="code">manage t signal</code> causes <code class="code">t</code> to manage <code class="code">signal</code>, thus overriding <code class="code">default_sys_behavior</code> for that signal, and any other OCaml handler for that signal.<br> <br> <code class="code">is_managing t signal</code> returns true iff <code class="code">manage t signal</code> has been called<br> <br> <code class="code">install_handler t signals f</code> causes <code class="code">t</code> to manage the handling of <code class="code">signals</code>, and registers <code class="code">f</code> to run on every signal in <code class="code">signals</code> that is delivered. It is an error if <code class="code">f</code> ever raises when it is called.<br> <br> <code class="code">remove_handler handler</code> causes the particular <code class="code">handler</code> to no longer handle the signals it was registered to handle. The signal manager continues to manage those signals, i.e. the OCaml signal handler remains installed, whether or not they still have handlers.<br> <br> <code class="code">handle_delivered t</code> runs all signal handlers on the signals that have been delivered but not yet handled.<br> </body></html>