请教关于fork的问题

请教关于fork的问题

用perl写cgi,想在用户提交表单后马上返回一个通知页面,然后当父进程运行结束时发邮件给用户。
用fork产生子进程,完成第一个任务:输出通知页面。

始终是在等待父进程结束,结果每次http都是返回500的错误,但是父进程是可以做完的。

请教高手这可能是什么原因?

代码如下:

    if ($forkpid = fork){
        父进程;
        ... ...
        发送邮件;
    }elsif (defined $forkpid){  ### child process. layout a simple message to user.

        $| = 1;
        my $ml = "进程结束将发邮件通知。";
        my $chld = new CGI;
        print $chld->header("text/html"),
                $chld->start_html("message"),
                $chld->h1("Thanks"),
                $chld->h3($ml),
                $chld->end_html();
                exit();
    }else {
        die "cannot fork: $!";
    }
首先设计有问题,这种情况需要用fork吗?
其次把fork, perlipc, perlfork的文档再好好看看吧

需要啊,不然用户关闭窗口的时候进程会结束的啊
这种情况最好的解决办法是javascript
呵呵,可是那个不会啊,没有别的办法吗?
把STDOUT,STDIN,STDERR都关掉
能否说的详细些?多谢啊!
子进程里加入:

close STDOUT;
close STDIN;
close STDERR;

原因:
when you fork a new process, Perl has both processes (the parent and the child) hold on to the same STDOUT, STDIN, and STDERR. Therefore, when running as a CGI, the response will not return to the user until all of these are freed up.
嗯,多谢!
不过我试了一下,似乎还是不行。
现在可以肯定的是fork是成功的,但是在需要等待较长时间时还是返回页面错误

唉,还有没有别的可能啊?
父子进程里都关掉也不行吗?