Version 1 (modified by mitty, 14 years ago) (diff) |
---|
fork child process on CGI
- sample code
#! /usr/bin/perl -w my $pid = fork; if (! defined $pid) { # cannot fork die("cannot fork: $!"); } if ($pid) { # parent process print "Content-type: text/html;\n\n"; # output something print "parent: $$ / child: $pid\n"; close(STDIN); close(STDOUT); exit; } else { # child proccess close(STDIN); close(STDOUT); # long long proccess ... }
- close(STDOUT)を必要と書かれている文献が多いが、手元の環境(下記)ではSTDINも閉じないと親プロセスは終了しなかった。
- 親プロセスについてはSTDIN/STDOUTを閉じた時点でhttpdからプロセスが終了させられるので(see Tips (CGI, Perl, Unix and etc.))、exit前に何かの処理を行うことは出来ない。
- apache2 -V
Server version: Apache/2.2.14 (Ubuntu) Server built: Apr 13 2010 20:22:19 Server's Module Magic Number: 20051115:23 Server loaded: APR 1.3.8, APR-Util 1.3.9 Compiled using: APR 1.3.8, APR-Util 1.3.9 Architecture: 64-bit Server MPM: Worker threaded: yes (fixed thread count) forked: yes (variable process count)