创建守护进程的时候为啥要exit(0)第一子进程

六神花露水
    protected static function daemonize()
    {
        if (!self::$daemonize) {
            return;
        }
        umask(0);
        $pid = pcntl_fork();
        if (-1 === $pid) {
            throw new Exception('fork fail');
        } elseif ($pid > 0) {
            exit(0);
        }
        if (-1 === posix_setsid()) {
            throw new Exception("setsid fail");
        }
        // Fork again avoid SVR4 system regain the control of terminal.
        $pid = pcntl_fork();
        if (-1 === $pid) {
            throw new Exception("fork fail");
        } elseif (0 !== $pid) {
            exit(0);
        }
    }

posix_setsid() 不是已经建立一个有别于终端的新session以脱离终端了吗??后面为啥又还要 pcntl_fork();然后exit(0);第一子进程??
@walkor

2851 1 0
1个回答

walkor

这个参考了一些文献资料,一些复合SVR4的系统可能会再次获得终端,再次fork一次会安全些

年代过于久远,无法发表回答
🔝