File: reference.xml

package info (click to toggle)
php-doc 20061001-1
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 45,764 kB
  • ctags: 1,611
  • sloc: xml: 502,485; php: 7,645; cpp: 500; makefile: 297; perl: 161; sh: 141; awk: 28
file content (162 lines) | stat: -rw-r--r-- 4,224 bytes parent folder | download
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>

    &note.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
-->