1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
|
<!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="Shell.html">
<link rel="next" href="Shell_mt.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 class attributes" rel=Appendix href="index_attributes.html">
<link title="Index of class methods" rel=Appendix href="index_methods.html">
<link title="Index of classes" rel=Appendix href="index_classes.html">
<link title="Index of class types" rel=Appendix href="index_class_types.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="Uq_gtk" rel="Chapter" href="Uq_gtk.html">
<link title="Equeue" rel="Chapter" href="Equeue.html">
<link title="Unixqueue" rel="Chapter" href="Unixqueue.html">
<link title="Uq_engines" rel="Chapter" href="Uq_engines.html">
<link title="Uq_socks5" rel="Chapter" href="Uq_socks5.html">
<link title="Unixqueue_mt" rel="Chapter" href="Unixqueue_mt.html">
<link title="Equeue_intro" rel="Chapter" href="Equeue_intro.html">
<link title="Uq_ssl" rel="Chapter" href="Uq_ssl.html">
<link title="Uq_tcl" rel="Chapter" href="Uq_tcl.html">
<link title="Netcgi_common" rel="Chapter" href="Netcgi_common.html">
<link title="Netcgi" rel="Chapter" href="Netcgi.html">
<link title="Netcgi_ajp" rel="Chapter" href="Netcgi_ajp.html">
<link title="Netcgi_scgi" rel="Chapter" href="Netcgi_scgi.html">
<link title="Netcgi_cgi" rel="Chapter" href="Netcgi_cgi.html">
<link title="Netcgi_fcgi" rel="Chapter" href="Netcgi_fcgi.html">
<link title="Netcgi_dbi" rel="Chapter" href="Netcgi_dbi.html">
<link title="Netcgi1_compat" rel="Chapter" href="Netcgi1_compat.html">
<link title="Netcgi_test" rel="Chapter" href="Netcgi_test.html">
<link title="Netcgi_porting" rel="Chapter" href="Netcgi_porting.html">
<link title="Netcgi_plex" rel="Chapter" href="Netcgi_plex.html">
<link title="Http_client" rel="Chapter" href="Http_client.html">
<link title="Telnet_client" rel="Chapter" href="Telnet_client.html">
<link title="Ftp_data_endpoint" rel="Chapter" href="Ftp_data_endpoint.html">
<link title="Ftp_client" rel="Chapter" href="Ftp_client.html">
<link title="Nethttpd_types" rel="Chapter" href="Nethttpd_types.html">
<link title="Nethttpd_kernel" rel="Chapter" href="Nethttpd_kernel.html">
<link title="Nethttpd_reactor" rel="Chapter" href="Nethttpd_reactor.html">
<link title="Nethttpd_engine" rel="Chapter" href="Nethttpd_engine.html">
<link title="Nethttpd_services" rel="Chapter" href="Nethttpd_services.html">
<link title="Nethttpd_plex" rel="Chapter" href="Nethttpd_plex.html">
<link title="Nethttpd_intro" rel="Chapter" href="Nethttpd_intro.html">
<link title="Netplex_types" rel="Chapter" href="Netplex_types.html">
<link title="Netplex_mp" rel="Chapter" href="Netplex_mp.html">
<link title="Netplex_mt" rel="Chapter" href="Netplex_mt.html">
<link title="Netplex_log" rel="Chapter" href="Netplex_log.html">
<link title="Netplex_controller" rel="Chapter" href="Netplex_controller.html">
<link title="Netplex_container" rel="Chapter" href="Netplex_container.html">
<link title="Netplex_sockserv" rel="Chapter" href="Netplex_sockserv.html">
<link title="Netplex_workload" rel="Chapter" href="Netplex_workload.html">
<link title="Netplex_main" rel="Chapter" href="Netplex_main.html">
<link title="Netplex_config" rel="Chapter" href="Netplex_config.html">
<link title="Netplex_kit" rel="Chapter" href="Netplex_kit.html">
<link title="Rpc_netplex" rel="Chapter" href="Rpc_netplex.html">
<link title="Netplex_cenv" rel="Chapter" href="Netplex_cenv.html">
<link title="Netplex_intro" rel="Chapter" href="Netplex_intro.html">
<link title="Netshm" rel="Chapter" href="Netshm.html">
<link title="Netshm_data" rel="Chapter" href="Netshm_data.html">
<link title="Netshm_hashtbl" rel="Chapter" href="Netshm_hashtbl.html">
<link title="Netshm_array" rel="Chapter" href="Netshm_array.html">
<link title="Netshm_intro" rel="Chapter" href="Netshm_intro.html">
<link title="Netconversion" rel="Chapter" href="Netconversion.html">
<link title="Netchannels" rel="Chapter" href="Netchannels.html">
<link title="Netstream" rel="Chapter" href="Netstream.html">
<link title="Mimestring" rel="Chapter" href="Mimestring.html">
<link title="Netmime" rel="Chapter" href="Netmime.html">
<link title="Netsendmail" rel="Chapter" href="Netsendmail.html">
<link title="Neturl" rel="Chapter" href="Neturl.html">
<link title="Netaddress" rel="Chapter" href="Netaddress.html">
<link title="Netbuffer" rel="Chapter" href="Netbuffer.html">
<link title="Netdate" rel="Chapter" href="Netdate.html">
<link title="Netencoding" rel="Chapter" href="Netencoding.html">
<link title="Netulex" rel="Chapter" href="Netulex.html">
<link title="Netaccel" rel="Chapter" href="Netaccel.html">
<link title="Netaccel_link" rel="Chapter" href="Netaccel_link.html">
<link title="Nethtml" rel="Chapter" href="Nethtml.html">
<link title="Netstring_str" rel="Chapter" href="Netstring_str.html">
<link title="Netstring_pcre" rel="Chapter" href="Netstring_pcre.html">
<link title="Netstring_mt" rel="Chapter" href="Netstring_mt.html">
<link title="Netmappings" rel="Chapter" href="Netmappings.html">
<link title="Netaux" rel="Chapter" href="Netaux.html">
<link title="Nethttp" rel="Chapter" href="Nethttp.html">
<link title="Netchannels_tut" rel="Chapter" href="Netchannels_tut.html">
<link title="Netmime_tut" rel="Chapter" href="Netmime_tut.html">
<link title="Netsendmail_tut" rel="Chapter" href="Netsendmail_tut.html">
<link title="Netulex_tut" rel="Chapter" href="Netulex_tut.html">
<link title="Neturl_tut" rel="Chapter" href="Neturl_tut.html">
<link title="Netsys" rel="Chapter" href="Netsys.html">
<link title="Netpop" rel="Chapter" href="Netpop.html">
<link title="Rpc_auth_dh" rel="Chapter" href="Rpc_auth_dh.html">
<link title="Rpc_key_service" rel="Chapter" href="Rpc_key_service.html">
<link title="Rpc_time" rel="Chapter" href="Rpc_time.html">
<link title="Rpc_auth_local" rel="Chapter" href="Rpc_auth_local.html">
<link title="Rtypes" rel="Chapter" href="Rtypes.html">
<link title="Xdr" rel="Chapter" href="Xdr.html">
<link title="Rpc" rel="Chapter" href="Rpc.html">
<link title="Rpc_program" rel="Chapter" href="Rpc_program.html">
<link title="Rpc_portmapper_aux" rel="Chapter" href="Rpc_portmapper_aux.html">
<link title="Rpc_packer" rel="Chapter" href="Rpc_packer.html">
<link title="Rpc_transport" rel="Chapter" href="Rpc_transport.html">
<link title="Rpc_client" rel="Chapter" href="Rpc_client.html">
<link title="Rpc_simple_client" rel="Chapter" href="Rpc_simple_client.html">
<link title="Rpc_portmapper_clnt" rel="Chapter" href="Rpc_portmapper_clnt.html">
<link title="Rpc_portmapper" rel="Chapter" href="Rpc_portmapper.html">
<link title="Rpc_server" rel="Chapter" href="Rpc_server.html">
<link title="Rpc_auth_sys" rel="Chapter" href="Rpc_auth_sys.html">
<link title="Rpc_intro" rel="Chapter" href="Rpc_intro.html">
<link title="Rpc_mapping_ref" rel="Chapter" href="Rpc_mapping_ref.html">
<link title="Rpc_ssl" rel="Chapter" href="Rpc_ssl.html">
<link title="Rpc_xti_client" rel="Chapter" href="Rpc_xti_client.html">
<link title="Shell_sys" rel="Chapter" href="Shell_sys.html">
<link title="Shell" rel="Chapter" href="Shell.html">
<link title="Shell_uq" rel="Chapter" href="Shell_uq.html">
<link title="Shell_mt" rel="Chapter" href="Shell_mt.html">
<link title="Shell_intro" rel="Chapter" href="Shell_intro.html">
<link title="Netsmtp" rel="Chapter" href="Netsmtp.html"><link title="Engines" rel="Section" href="#1_Engines">
<link title="Examples" rel="Section" href="#1_Examples">
<title>Ocamlnet 2 Reference Manual : Shell_uq</title>
</head>
<body>
<div class="navbar"><a href="Shell.html">Previous</a>
<a href="index.html">Up</a>
<a href="Shell_mt.html">Next</a>
</div>
<center><h1>Module <a href="type_Shell_uq.html">Shell_uq</a></h1></center>
<br>
<pre><span class="keyword">module</span> Shell_uq: <code class="code">sig</code> <a href="Shell_uq.html">..</a> <code class="code">end</code></pre>Run shell commands within Unixqueues<br>
<hr width="100%">
<br>
This module is <b>not thread-safe</b>. See the module <code class="code">Shell_sys</code> for
more information.<br>
<br>
<b>Signal handlers:</b> It is important to have a number of signal handlers
installed for proper function of the engines. It is recommended to
call the pair of functions <a href="Shell_sys.html#VALconfigure_job_handlers"><code class="code">Shell_sys.configure_job_handlers</code></a> and
<a href="Shell_sys.html#VALinstall_job_handlers"><code class="code">Shell_sys.install_job_handlers</code></a> for this purpose. This is not
done automatically.
<p>
Note that this has a global side effect on the whole process, because
there is only one set of signal handlers.<br>
<br>
<a name="1_Engines"></a>
<h1>Engines</h1><br>
<pre><span class="keyword">class type</span> <a name="TYPEsystem_handler_engine_type"></a><code class="type">['a]</code> <a href="Shell_uq.system_handler_engine_type.html">system_handler_engine_type</a> = <code class="code">object</code> <a href="Shell_uq.system_handler_engine_type.html">..</a> <code class="code">end</code></pre><div class="info">
This engine type can be passed as <code class="code">system_handler</code> to
<a href="Shell_sys.html#VALregister_job"><code class="code">Shell_sys.register_job</code></a> in order to watch a running job.
</div>
<pre><span class="keyword">class</span> <a name="TYPEsystem_handler_engine"></a><a href="Shell_uq.system_handler_engine.html">system_handler_engine</a> : <code class="type"><a href="Unixqueue.event_system.html">Unixqueue.event_system</a> -> </code><code class="type">[unit]</code> <code class="type"><a href="Shell_uq.system_handler_engine_type.html">system_handler_engine_type</a></code></pre><div class="info">
This engine implements a <a href="Shell_sys.html#TYPEsystem_handler"><code class="code">Shell_sys.system_handler</code></a>, and can
be used to watch an already started <code class="code">job_instance</code> as created by
<a href="Shell_sys.html#VALrun_job"><code class="code">Shell_sys.run_job</code></a> until the job is done.
</div>
<pre><span class="keyword">class type</span> <a name="TYPEjob_handler_engine_type"></a><code class="type">['a]</code> <a href="Shell_uq.job_handler_engine_type.html">job_handler_engine_type</a> = <code class="code">object</code> <a href="Shell_uq.job_handler_engine_type.html">..</a> <code class="code">end</code></pre><div class="info">
In addition to the <code class="code">system_handler_engine_type</code>, this type of engine
returns the <code class="code">job</code> and the <code class="code">job_instance</code>.
</div>
<pre><span class="keyword">class</span> <a name="TYPEcall_engine"></a><a href="Shell_uq.call_engine.html">call_engine</a> : <code class="type">?ignore_error_code:bool -> ?mode:<a href="Shell_sys.html#TYPEgroup_mode">Shell_sys.group_mode</a> -> ?stdin:<a href="Shell.html#TYPEproducer">Shell.producer</a> -> ?stdout:<a href="Shell.html#TYPEconsumer">Shell.consumer</a> -> ?stderr:<a href="Shell.html#TYPEconsumer">Shell.consumer</a> -> <a href="Shell_sys.html#TYPEcommand">Shell_sys.command</a> list -> <a href="Unixqueue.event_system.html">Unixqueue.event_system</a> -> </code><code class="type">[<a href="Shell_sys.html#TYPEjob_status">Shell_sys.job_status</a>]</code> <code class="type"><a href="Shell_uq.job_handler_engine_type.html">job_handler_engine_type</a></code></pre><div class="info">
This engine corresponds to <a href="Shell.html#VALcall"><code class="code">Shell.call</code></a>.
</div>
<br>
<a name="1_Examples"></a>
<h1>Examples</h1>
<p>
All examples presented for the <a href="Shell.html"><code class="code">Shell</code></a> module can be easily rewritten
for <code class="code">Shell_uq</code>. For example, to call "ls" and collect the result in a
buffer, use this piece of code:
<p>
<pre><code class="code"> let ues = Unixqueue.create_unix_event_system();;
let b = Buffer.create 10;;
let e = new call_engine ~stdout:(Shell.to_buffer b) [ Shell.command "ls" ];;
Unixqueue.run ues;;
let r = Buffer.contents b;;
</code></pre>
<p>
This means, one simply creates a <code class="code">call_engine</code> instead of invoking
<a href="Shell.html#VALcall"><code class="code">Shell.call</code></a>, and then runs the queue. Note that you must look at
<code class="code">e#state</code> to find out whether the engine <code class="code">e</code> produced an error, no
exception is raised in this case.
<p>
It is allowed (and somehow the purpose of this module) to create
several job engines, and let them run in parallel.<br>
</body></html>
|