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 相关文章推荐
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
spl_autoload_register与autoload的区别详解
Jun 03 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
php数组使用规则分析
Feb 27 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
Sep 30 PHP
thinkphp 框架数据库切换实现方法分析
May 18 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
PHP计算日期相差天数实例分析
2016/02/23 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
JS 控件事件小结
2012/10/31 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
Python内置数据类型详解
2014/08/18 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
深入了解NumPy 高级索引
2020/07/24 Python
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
旷课检讨书大全
2014/01/21 职场文书
艺术学院毕业生自我评价
2014/03/02 职场文书
五一劳动节活动记录
2014/03/23 职场文书
求职信模板
2014/05/23 职场文书
历史学专业求职信
2014/06/19 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
导游词之杭州西湖
2019/09/19 职场文书