柳州门户网站建设公司排名,高权重网站做js代码跳转,提供资料下载的网站如何建设,做响应式网站设计师如何布局呢PHP 如何实现守护进程发布时间#xff1a;2020-07-11 15:29:31来源#xff1a;亿速云阅读#xff1a;58作者#xff1a;LeahPHP 如何实现守护进程#xff1f;针对这个问题#xff0c;这篇文章详细介绍了相对应的分析和解答#xff0c;希望可以帮助更多想解决这个问题的小…PHP 如何实现守护进程发布时间2020-07-11 15:29:31来源亿速云阅读58作者LeahPHP 如何实现守护进程针对这个问题这篇文章详细介绍了相对应的分析和解答希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。守护进程守护进程作为一种常驻进程服务很常见例如 PHP-FPM NGINXREDIS都需要一个父进程来支持整个服务。但是用 PHP 编写守护进程不多见今天就来用 PHP 来实现一下。步骤● fork 子进程● 父进程退出● 设置新的会话● 重置文件掩码● 关闭标准输入输出实现我们对着以上的步骤来实现在这之前需要 pcntl 和 posix 扩展请确保安装了。function daemon() {$pid pcntl_fork();// fork 失败if ($pid 0) {exit(fork failed);} else if ($pid 0) {// 退出父进程exit(0);}// 设置新的会员// setsid 有几个注意点// 不能是进程组的组长调用// 对于进程组组员调用会产生新的会话和进程组并成为该进程组的唯一成员调用的进程将脱离终端if (posix_setsid() 0) {exit(set sid failed);}// 重置文件掩码umask(0);// 切换工作目录chdir(/);// 关闭标准输入输出fclose(STDIN);fclose(STDOUT);fclose(STDERR);}细节// 获取进程IDvar_dump(posix_getpid());// 获取进程组IDvar_dump(posix_getpgid(posix_getpid()));// 获取进程会话IDvar_dump(posix_getsid(posix_getpid()));三者结果相同说明了该进程即使进程组的组长也是会话首领。为什么需要 umask (0)当你在 linux 调用 umask 的时候你会看到一个掩码值这个掩码决定了你创建文件权限范围例如本人当前机器的 umask 为0022文件的最大权限是 0666而目录的最大权限是 0777 那么当前用户的创建的目录权限就是 0755对于当前用户而言就是 rwx-rx-rx 权限。而文件则是 0644对于当前用户而言 rw-r-r 权限。所以如果没有重置掩码的话那么对于目录而言就是 0755而文件则是 0644 了。注意如果你在进程使用了 echo var_dump 等函数一定要把标准输出等重定向到其他文件流中。新增加下面代码就可以了。global $stdin, $stdout, $stderr;$stdin fopen(/dev/null, r);$stdout fopen(/www/php/txt.txt,wb);$stderr fopen(/dev/null, wb);因为在上面已经关闭了标准输入输出此时文件描述符 fd 已经没有所有重新打开之后 fd 从非负开始依次是 012。正好作为标准输入输出的文件。当然重定向到那里需要你自己设置。最后的二次 fork这个问题需要好好斟酌因为是非必须的。目前想不到有什么场景下必须两次 Fork。关于PHP 如何实现守护进程问题的解答就分享到这里了希望以上内容可以对大家有一定的帮助如果你还有很多疑惑没有解开可以关注亿速云行业资讯频道了解更多相关知识。