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");
}