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 和 XML: 使用expat函数(一)
Oct 09 PHP
一周学会PHP(视频)Http下载
Dec 12 PHP
php模板之Phpbean的目录结构
Jan 10 PHP
php实现aes加密类分享
Feb 16 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
Nov 25 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
php正则preg_replace_callback函数用法实例
Jun 01 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
Sep 09 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 PHP
一文搞懂PHP中的抽象类和接口
May 25 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程序的方法小结
2012/02/23 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
2014/04/10 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
javascript中new关键字详解
2015/12/14 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
Python序列化基础知识(json/pickle)
2017/10/19 Python
windows下Virtualenvwrapper安装教程
2017/12/13 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
python实现xlsx文件分析详解
2018/01/02 Python
详解Python之unittest单元测试代码
2018/01/24 Python
python+opencv识别图片中的圆形
2020/03/25 Python
linux环境下Django的安装配置详解
2019/07/22 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
毕业晚会主持词
2014/03/24 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
文明家庭事迹材料
2014/12/20 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript