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 相关文章推荐
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
解析PHP工厂模式的好处
Jun 18 PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 PHP
PHP生成短网址的3种方法代码实例
Jul 08 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
dedecms中使用php语句指南
Nov 13 PHP
PHP 使用memcached简单示例分享
Mar 05 PHP
php 使用redis锁限制并发访问类示例
Nov 02 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
PHP使用反向Ajax技术实现在线客服系统详解
Jul 01 PHP
PHP字符串与数组处理函数用法小结
Jan 07 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
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
php-fpm中max_children的配置
2019/03/15 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
js传递数组参数到后台controller的方法
2018/03/29 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
jquery实现的分页显示功能示例
2019/08/23 jQuery
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
python简单实现刷新智联简历
2016/03/30 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
python设置环境变量的原因和方法
2019/06/24 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
医科大学生毕业的自我评价分享
2013/11/12 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
地道战观后感500字
2015/06/04 职场文书
保留意见审计报告
2015/06/05 职场文书
单位提档介绍信
2015/10/22 职场文书
创业计划书之水果店
2019/07/18 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
Python time库的时间时钟处理
2021/05/02 Python
DQL数据查询语句使用示例
2022/12/24 MySQL