当前位置:  开发笔记 > 编程语言 > 正文

如何使用mod_perl2正确分叉?

如何解决《如何使用mod_perl2正确分叉?》经验,为你挑选了0个好方法。

我在从mod_perl2下运行的一些代码中分配一个长时间运行的进程时遇到了麻烦.

一切都在大部分工作,但似乎分叉的进程持有Apache的日志文件的开放句柄 - 这意味着Apache在进程运行时不会重新启动(我得到'未能打开日志文件'的消息).

这是我正在使用的代码:

use POSIX; # required for setsid

# Do not wait for child processes to complete
$SIG{CHLD} = 'IGNORE';

# fork (and make sure we did!)
defined (my $kid = fork) or die "Cannot fork: $!\n";

if ($kid) {
    return (1, $kid);
}else {
    # chdir to /, stops the process from preventing an unmount
    chdir '/' or die "Can't chdir to /: $!";

    # dump our STDIN and STDOUT handles
    open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
    open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";

    # redirect for logging
    open STDERR, '>', $log_filename or die "Can't write to log: $!";

    # Prevent locking to apache process
    setsid or die "Can't start a new session: $!";

    # execute the command
    exec( $cmd, @args );

    die "Failed to exec";
}

回到mod_perl1天,我记得用它$r->cleanup_for_exec来解决这个问题,但是mod_perl2似乎没有支持它.(编辑:显然它不再需要..)

如果没有这些问题从mod_perl2正确启动长时间运行过程的任何建议将不胜感激!

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有