php 创建守护进程

function createDeamon() {
        set_time_limit(0);

        // 只允许在cli下面运行  
        if (php_sapi_name() != "cli") {
            die("only run in command line mode\n");
        }

        umask(0); //把文件掩码清0  

        if (pcntl_fork() != 0) { //是父进程,父进程退出  
            exit();
        } 

        posix_setsid(); //设置新会话组长,脱离终端  

        if (pcntl_fork() != 0) { //第二次fock子进程  
            exit();
        }


        chdir("/"); //改变工作目录  

        $user = posix_getpwnam(self::getConfig('deamon', 'user'));
        if ($user) {
            $uid = $user['uid'];
            $gid = $user['gid'];
            $result = posix_setuid($uid);
            posix_setgid($gid);
        } else {
            die('守护进程用户权限设置失败,请重新设置!');
        }

        //关闭打开的文件描述符  
        fclose(STDIN);
        fclose(STDOUT);
        fclose(STDERR);
        
        global $STDIN, $STDOUT, $STDERR;
        $outputfile = self::getConfig('deamon', 'outputfile');
        $dirname = dirname($outputfile);
        if( !file_exists($dirname) ){
            mkdir($dirname);
        }
        
        $STDIN = fopen('/dev/null', "a");
        $STDOUT = fopen($outputfile, "a");
        $STDERR = fopen($outputfile, "a");
    }
此条目发表在php, php函数集分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

看不清?