PHP扩展程序实现守护进程


Posted in PHP onApril 16, 2015

一般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开发中常用的三个表单验证函数使用小结
Mar 03 PHP
php中通过虚代理实现延迟加载的实现代码
Jun 10 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
php的array数组和使用实例简明教程(容易理解)
Mar 20 PHP
PHP中feof()函数实例测试
Aug 23 PHP
PHP队列用法实例
Nov 05 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
Mar 18 PHP
PHP高效获取远程图片尺寸和大小的实现方法
Oct 20 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
php中isset与empty函数的困惑与用法分析
Jul 05 PHP
PHP哈希表实现算法原理解析
Dec 11 PHP
php简单实现查询数据库返回json数据
Apr 16 #PHP
PHP中SESSION的注销与清除
Apr 16 #PHP
PHP中trim()函数简单使用指南
Apr 16 #PHP
php检查是否是ajax请求的方法
Apr 16 #PHP
php将日期格式转换成xx天前的格式
Apr 16 #PHP
为百度UE编辑器上传图片添加水印功能
Apr 16 #PHP
php+ajax实现的点击浏览量加1
Apr 16 #PHP
You might like
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
Ext 表单布局实例代码
2009/04/30 Javascript
javascript 简练的几个函数
2009/08/29 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
对pandas中apply函数的用法详解
2018/04/10 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
python连接mongodb密码认证实例
2018/10/16 Python
python字典改变value值方法总结
2019/06/21 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
小学教师学期末自我评价
2013/09/25 职场文书
创先争优承诺书范文
2014/03/31 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
在redisCluster中模糊获取key方式
2021/07/09 Redis