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连mysql和oracle数据库性能比较
Oct 09 PHP
多数据表共用一个页的新闻发布
Oct 09 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
浅谈php冒泡排序
Dec 30 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
PHP在线调试执行的实现方法(附demo源码)
Apr 28 PHP
PHP最常用的正则表达式
Feb 13 PHP
php中的单引号、双引号和转义字符详解
Feb 16 PHP
PHP实现限制IP访问的方法
Apr 20 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 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 模拟登陆MSN并获得用户信息
2009/05/16 PHP
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
php实现字符串翻转的方法
2015/03/27 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
python打包成so文件过程解析
2019/09/28 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
python文件路径操作方法总结
2020/12/21 Python
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
网络技术支持面试题
2013/04/22 面试题
J2EE包括哪些技术
2016/11/25 面试题
汉语专业应届生求职信
2013/10/01 职场文书
公务员年总结的自我评价
2013/10/25 职场文书
军训自我鉴定
2014/01/22 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL