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脚本数据库功能详解(下)
Oct 09 PHP
ajax+php打造进度条 readyState各状态
Mar 20 PHP
php 带逗号千位符数字的处理方法
Jan 10 PHP
PHP与javascript实现变量交互的示例代码
Jul 23 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 PHP
php 获取页面中指定内容的实现类
Jan 23 PHP
PHP判断是否有Get参数的方法
May 05 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
php 中奖概率算法实现代码
Jan 25 PHP
PHP isset()与empty()的使用区别详解
Feb 10 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 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
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
js 判断浏览器使用的语言示例代码
2014/03/22 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Python3多线程操作简单示例
2018/05/22 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
小学教师培训感言
2014/02/11 职场文书
工作决心书
2014/03/11 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
新闻稿怎么写
2015/07/18 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android