php守护进程

/*
 * php 进程管理
 */
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR);
$STDIN = fopen('/dev/null', 'r');
$STDOUT = fopen('application.log', 'ab');
$STDERR = fopen('error.log', 'ab');
echo '父进程:'.posix_getpid()."\r\n";
$pid = pcntl_fork();
//父进程和子进程都会执行下面代码
echo '创建了子进程:'.$pid . "\r\n";
if ($pid == -1) {
    //错误处理:创建子进程失败时返回-1.
    die('could not fork');
} else if ($pid > 0) {
    //父进程会得到子进程号,所以这里是父进程执行的逻辑
    //pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。
    echo '结束父进程'."\r\n";
    exit(0);
} 
//子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
$sid = posix_setsid();  //Make the current process a session leader
if($sid < 0){
    //-1 创建失败
    exit(1);
}
while(true){
    sleep(1);
    echo '守护进程在运行,时间:'.date('Y-m-d H:i:s')."\r\n";
}

你可能感兴趣的:(php守护进程)