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
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.10 $ -->
<!-- Purpose: fileprocess.process -->
<!-- Membership: bundled -->
<reference id="ref.pcntl">
<title>Process Control Functions</title>
<titleabbrev>PCNTL</titleabbrev>
<partintro>
<section id="pcntl.intro">
&reftitle.intro;
<para>
Process Control support in PHP implements the Unix style of
process creation, program execution, signal handling and process
termination. Process Control should not be enabled within a
webserver environment and unexpected results may happen if any
Process Control functions are used within a webserver environment.
</para>
<para>
This documentation is intended to explain the general usage of
each of the Process Control functions. For detailed information
about Unix process control you are encouraged to consult your
systems documentation including fork(2), waitpid(2) and signal(2)
or a comprehensive reference such as Advanced Programming in the
UNIX Environment by W. Richard Stevens (Addison-Wesley).
</para>
<para>
PCNTL now uses ticks as the signal handle callback mechanism, which is
much faster than the previous mechanism. This change follows the same
semantics as using "user ticks". You use the <function>declare</function>
statement to specify the locations in your program where callbacks are
allowed to occur. This allows you to minimize the overhead of handling
asynchronous events. In the past, compiling PHP with pcntl enabled would
always incur this overhead, whether or not your script actually used
pcntl.
</para>
<para>
There is one adjustment that all pcntl scripts prior to PHP 4.3.0 must
make for them to work which is to either to use
<function>declare</function> on a section where you wish to allow
callbacks or to just enable it across the entire script using
the new global syntax of <function>declare</function>.
</para>
¬e.no-windows.extension;
</section>
<section id="pcntl.requirements">
&reftitle.required;
&no.requirement;
</section>
&reference.pcntl.configure;
<section id="pcntl.configuration">
&reftitle.runtime;
&no.config;
</section>
<section id="pcntl.resources">
&reftitle.resources;
&no.resource;
</section>
&reference.pcntl.constants;
<section id="pcntl.example">
&reftitle.examples;
<para>
This example forks off a daemon process with a signal handler.
</para>
<example>
<title>Process Control Example</title>
<programlisting role="php">
<![CDATA[
<?php
declare(ticks=1);
$pid = pcntl_fork();
if ($pid == -1) {
die("could not fork");
} else if ($pid) {
exit(); // we are the parent
} else {
// we are the child
}
// detatch from the controlling terminal
if (!posix_setsid()) {
die("could not detach from terminal");
}
// loop forever performing tasks
while (1) {
// do something interesting here
}
function sig_handler($signo)
{
switch ($signo) {
case SIGTERM:
// handle shutdown tasks
exit;
break;
case SIGHUP:
// handle restart tasks
break;
default:
// handle all other signals
}
}
// setup signal handlers
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGHUP, "sig_handler");
?>
]]>
</programlisting>
</example>
</section>
<section id="pcntl.seealso">
&reftitle.seealso;
<para>
A look at the section about
<link linkend="ref.posix">POSIX functions</link>
may be useful.
</para>
</section>
</partintro>
&reference.pcntl.functions;
</reference>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|