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 mysql索引问题
Jun 07 PHP
11个PHP 分页脚本推荐
Aug 15 PHP
php注销代码(session注销)
May 31 PHP
php中判断文件存在是用file_exists还是is_file的整理
Sep 12 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
php使用MySQL保存session会话的方法
Jun 18 PHP
PHP身份证校验码计算方法
Aug 10 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
Yii框架 session 数据库存储操作方法示例
Nov 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
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
2012/01/13 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
python使用递归解决全排列数字示例
2014/02/11 Python
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
Python基于内置函数type创建新类型
2020/10/22 Python
创业计划书的内容步骤和要领
2014/01/04 职场文书
美术课外活动总结
2014/07/08 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
5.12护士节活动总结
2015/02/10 职场文书
小学六一主持词开场白
2015/05/28 职场文书
导游带团欢迎词
2015/09/30 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android