.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Apache::fork 3" .TH Apache::fork 3 "2007-03-30" "perl v5.8.8" "User Contributed Perl Documentation" .SH "NAME" Apache::fork \- Override Perl's built\-in fork() .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Apache::fork; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" The \fBfork\fR function defined in this module will override Perl's built-in \fBfork\fR function so that any children resulting from a \fIfork()\fR will (optionally) close any open listening http sockets (main server and virtuals) and/or kill the child httpd process with \fIexit()\fR is called. .PP \&\s-1TOGGLING:\s0 forkoption(int) usage: .PP int can be one of the following... .PP 0 = Nothing, perform your normal \fIfork()\fR. 1 = Have the child resulting from a fork close all listening sockets. 2 = Have the child resulting from a \fIfork()\fR die with \fIexit()\fR is called. 3 = Do both 1 and 2. .PP Default is 3. .PP \&\s-1NOTE:\s0 forkoption is \s-1NOT\s0 reset to default between hits, why? So you could set it in a perlscript and have it last across clients/runs (ie so you wouldn't need to go modifying your mod_perl (or in my case, pure CGI/perl scripts. ;) .PP \&\s-1ALSO\s0 \s-1NOTE:\s0 The parent process will still have the http sockets open, so it can still communicate with the downstream client, as well as still accept connections after the client has disconnected, it's only the resulting child who will no longer have the http sockets open. .PP \&\s-1ANOTHER\s0 \s-1NOTE:\s0 The child \s-1STILL\s0 has the socket open to the client, it's just the listening sockets (port 80, etc) that's closed. .PP \&\s-1AYA\s0 \s-1NOTE:\s0 \s-1ALL\s0 listening sockets are closed, for the main server \s-1AND\s0 for any alternative ports you have the httpd process listening to. .PP \&\s-1WHY\s0?: Sometimes, you want to have your script fork, then exec a process so that it can perform some nifty thing in the background. Unfortunatly, when you fork (and exec), all open file descriptors are passed along, including the listening \s-1HTTP\s0 sockets that are used by the server to accept connections, which can be a bad thing. (ie. Child is forked, forked child has port 80 open, forked child \fIexec()\fR's whatever, now whatever has port 80 open, server is \s-1HUP\s0'd, restarted, whatever... \&'course, it can't because some other process already has control over port 80 (ie, whatever)) Ow? ;) .PP Also, forked children would \*(L"hang around\*(R" when they were finished (or \&\fIexit()\fR'd) unless exit(\-2) was used. And, the original parent httpd had no clue the children even existed. Essentually, you'd end up with an indefinite number of httpd processes (as each \fIforked()\fR'd child would never exit). Of course, with the socket closing patch in place... those children never again served another page either. .PP This patch was made essentually to make \fIfork()\fR under mod_perl act like you'd expect it to (so modules that might be used by non\-mod_perl scripts wouldn't need to be modified) .PP Incase any of you were curious, all my \s-1CGI\s0 scripts run unmodified under mod_perl. Not a single line of mod_perl anything in them. If they won't work under mod_perl for some odd reason, I just modify mod_perl so they do. ;) .SH "AUTHOR" .IX Header "AUTHOR" Michael Turner, mturner@spry.com