php 编写linux守护进程
来源:互联网 发布:linux目录常用命令 编辑:程序博客网 时间:2024/05/18 03:03
问题:将一个php程序以linux守护进程(在后台运行)的方式运行?
解决方法:(见代码)
// index.php文件
<?php/*实现守护进程化,当你的PHP程序需要转为后台运行时,只需要调用一次封装好的函数init()即可。编写守护进程的一般步骤步骤:(1)在父进程中执行fork并exit推出;(2)在子进程中调用setsid函数创建新的会话;(3)在子进程中调用chdir函数,让根目录 ”/” 成为子进程的工作目录;(4)在子进程中执行fork并exit推出;(5)在子进程中调用umask函数,设置进程的umask为0;(6)在子进程中关闭任何不需要的文件描述符*/class Daemon{ public function init(){ //创建一个子进程 $pid = pcntl_fork(); if ($pid == -1){ throw new Exception('fork子进程失败'); }elseif ($pid > 0){ //父进程退出,子进程变成孤儿进程被1号进程收养,进程脱离终端 exit(0) ; } //创建一个新的会话,脱离终端控制,更改子进程为组长进程 $sid = posix_setsid(); if ($sid == -1) { throw new Exception('setsid fail'); } //修改当前进程的工作目录,由于子进程会继承父进程的工作目录,修改工作目录以释放对父进程工作目录的占用。 chdir('/'); /** * 通过上一步,我们创建了一个新的会话组长,进程组长,且脱离了终端,但是会话组长可以申请重新打开一个终端,为了避免 * 这种情况,我们再次创建一个子进程,并退出当前进程,这样运行的进程就不再是会话组长。 */ $pid = pcntl_fork(); if ($pid == -1) { throw new Exception('fork子进程失败'); } elseif ($pid > 0) { //再一次退出父进程,子进程的子进程(孙子进程)成为最终的守护进程 exit(0); } umask(0); //重设文件创建掩模//由于守护进程用不到标准输入输出,关闭标准输入,输出,错误输出描述符 fclose(STDIN); fclose(STDOUT); fclose(STDERR); }}/* * 当前操作系统为linux时,启动linux守护进程*/if (strtoupper(substr(PHP_OS, 0, 3)) === 'Linux') { $daemon = new Daemon() ; $daemon -> init();}
//这里可以是你的程序代码,我将程序代码写入了另一个文件中了,故在此加载文件include_once __DIR__."/log_analysis.php" ;
?>
在linux系统中测试:
查看index.php文件是否在后台运行:
1 0
- php 编写linux守护进程
- linux 守护进程编写
- linux 守护进程编写
- linux 守护进程编写
- 编写linux守护进程
- linux 守护进程编写
- linux 守护进程编写
- linux 守护进程编写
- linux 守护进程编写
- linux 守护进程编写
- linux守护进程编写
- linux 守护进程编写
- linux 守护进程编写
- linux 守护进程编写
- 编写Linux/Unix守护进程
- 编写Linux/Unix守护进程
- 编写Linux/Unix守护进程
- 编写Linux/Unix守护进程
- 用js实现返回上一步操作
- STM32F10x之RCC
- jQuery实现自由拖动DIV插件
- Github:初学者上传文件到github
- Java 自增,自减操作
- php 编写linux守护进程
- Sprint Listener 监听器
- android Intent的简介以及属性的详解
- 余弦相似度
- One or more Filters failed to start. Full details will be found in the appropriate container log fil
- [Leetcode] 49. Group Anagrams 解题报告
- Java中的异常处理机制
- 安卓从googlephoto上选择云端图片导致程序崩溃的解决方案
- Android InstantAPP使用(秒杀微信小程序)