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 09 PHP
提升PHP执行速度全攻略(下)
Oct 09 PHP
新浪新闻小偷
Oct 09 PHP
令PHP初学者头疼十四条问题大总结
Nov 12 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
Jul 14 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
Aug 17 PHP
PHP 极验验证码实例讲解
Sep 29 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
PHP支付宝当面付2.0代码
Dec 21 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
基于mysql的论坛(4)
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
使用python在本地电脑上快速处理数据
2017/06/22 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
上班玩手机检讨书
2014/02/17 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS
dubbo服务整合zipkin详解
2021/07/26 Java/Android
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android