资讯专栏INFORMATION COLUMN

workerman笔记-php创建守护进程

Cristic / 703人阅读

摘要:守护进程常常在系统引导装入时启动,在系统关闭时终止。进程组有进程组来唯一标识。且该进程组不会因组长进程的退出而受到影响。

使用函数
pcntl_fork();//创建子进程
posix_setsid();//设置当前进程为进程组长

posix_getpid();//获取进程id
例子

workerman中将进程

/**
 * Run as deamon mode.
 *
 * @throws Exception
 */
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);
    }
}
其他说明 基本概念

守护进程:Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。

进程组:是一个或多个进程的集合。进程组有进程组ID来唯一标识。除了进程号(PID)之外,进程组ID也是一个进程的必备属性。每个进程组都有一个组长进程,其组长进程的进程号等于进程组ID。且该进程组ID不会因组长进程的退出而受到影响。

会话周期:会话期是一个或多个进程组的集合。通常,一个会话开始于用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。

创建流程

fork子进程,父进程退出

更改子进程为组长进程

改变当前目录为根目录(chdir())

重设文件权限掩码

关闭文件描述符

守护进程退出,处理SIGCHLD信号

信号处理

//TODO

参考资料

PHP实现守护进程

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21550.html

相关文章

  • PHP进程系列笔记(四)

    摘要:本节主要讲解常用函数和进程池的概念,也会涉及到守护进程的知识。所以任何时候,建议预先创建好进程,也就是使用进程池的方式实现。 本节主要讲解Posix常用函数和进程池的概念,也会涉及到守护进程的知识。本节难度较低。 Posix常用函数 posix_kill 向指定pid进程发送信号。成功时返回 TRUE , 或者在失败时返回 FALSE 。 bool posix_kill ( int $...

    Cc_2011 评论0 收藏0
  • workerman 简要分析

    摘要:后面每开启一个子进程,会将子进程的存储到中,用来后面主进程监控子进程,如果子进程意外终止,主进程可以重新佛。将当前子进程设置为会话组再次创建子进程,为了防止在的系统下重新打开控制终端。 wokerman 启动分析 @(学习)[workerman, php] 前期想说的 也是最近才看的代码,遇到不懂得地方就去google,所以这篇文章里面穿插了很多参考资料,可以直接点击阅览。 需要了解一...

    senntyou 评论0 收藏0
  • 部署web项目的过程记录,包括laravel,redis,mongodb,workerman的配置过

    摘要:如果服务器中该账号的钥匙对已经存在,并且已经将放到该账号的设置中,可以跳过这一步。如果不符合,需要根据提示安装必要的扩展。后续再进行补充做守护队列监听进程和自动部署到服务器的说明。 系统LAMP基础环境是已经搭建好,记录要将web项目部署到线上的过程如下,方便后续部署新项目时参考: laravel项目ubuntu 16.04php 7.0 克隆项目到服务器 (1)我们使用 your@e...

    bluesky 评论0 收藏0
  • 部署web项目的过程记录,包括laravel,redis,mongodb,workerman的配置过

    摘要:如果服务器中该账号的钥匙对已经存在,并且已经将放到该账号的设置中,可以跳过这一步。如果不符合,需要根据提示安装必要的扩展。后续再进行补充做守护队列监听进程和自动部署到服务器的说明。 系统LAMP基础环境是已经搭建好,记录要将web项目部署到线上的过程如下,方便后续部署新项目时参考: laravel项目ubuntu 16.04php 7.0 克隆项目到服务器 (1)我们使用 your@e...

    xuexiangjys 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<