PHP程序守护进程化实现方法详解


Posted in PHP onJuly 16, 2020

一般Server程序都是运行在系统后台,这与普通的交互式命令行程序有很大的区别。glibc里有一个函数daemon。调用此函数,就可使当前进程脱离终端变成一个守护进程,具体内容参见man daemon。PHP中暂时没有此函数,当然如果你有兴趣的话,可以写一个PHP的扩展函数来实现。

PHP命令行程序实现守护进程化有2种方法:

一 、使用nohup

nohup php myprog.php > log.txt &

这里就实现了守护进程化。

单独执行 php myprog.php,当按下ctrl+c时就会中断程序执行,会kill当前进程以及子进程。

php myprog.php &,这样执行程序虽然也是转为后台运行,实际上是依赖终端的,当用户退出终端时进程就会被杀掉。

二、使用PHP代码来实现

function daemonize() {
  $pid = pcntl_fork();
  if ($pid == -1) {
    die("fork(1) failed!\n");
  }
  elseif($pid > 0) {
    //让由用户启动的进程退出
    exit(0);
  }

  //建立一个有别于终端的新session以脱离终端
  posix_setsid();

  $pid = pcntl_fork();
  if ($pid == -1) {
    die("fork(2) failed!\n");
  }
  elseif($pid > 0) {
    //父进程退出, 剩下子进程成为最终的独立进程
    exit(0);
  }
}
daemonize();
sleep(1000);

用上面代码即可实现守护进程化,当你的PHP程序需要转为后台运行时,只需要调用一次封装好的函数daemonize()即可。
注:这里没有实现标准输入输出的重定向。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
最省空间的计数器
Oct 09 PHP
用PHP实现小型站点广告管理(修正版)
Oct 09 PHP
PHP中,文件上传
Dec 06 PHP
php下使用以下代码连接并测试
Apr 09 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
php实现cookie加密的方法
Mar 10 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
Mar 09 PHP
PHP如何获取Cookie并实现模拟登录
Jul 16 #PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 #PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 #PHP
PHP xpath提取网页数据内容代码解析
Jul 16 #PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 #PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 #PHP
PHP number_format函数原理及实例解析
Jul 14 #PHP
You might like
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
php操作access数据库的方法详解
2017/02/22 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
prototype1.4中文手册
2006/09/22 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
javascript的函数作用域
2014/11/12 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
js实现下一页页码效果
2017/03/07 Javascript
基于dataset的使用和图片延时加载的实现方法
2017/12/11 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
对python制作自己的数据集实例讲解
2018/12/12 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
python写入文件自动换行问题的方法
2019/07/05 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
科室工作的个人自我评价
2013/10/30 职场文书
终止劳动合同协议书
2014/10/05 职场文书
打架检讨书
2015/01/27 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
防震减灾主题班会
2015/08/14 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
2019个人工作总结
2019/06/21 职场文书