守护进程之PHP实现
什么是守护进程
守护进程(daemon)是一种特殊的进程,它的生命周期很长,它在后台运行并且没有控制终端(这样可以保证守护进程不会接收到各种来自终端的信号)。
比如:crontab、sshd、nginx等,都会使用守护进程的形式运行,确保可以一直正常的提供服务。
如何实现守护进程
fork子进程,父进程退出(当前子进程会成为init进程的子进程)
子进程调用setsid(),开启一个新会话,成为新的会话组长,并且释放于终端的关联关系
再次fork子进程,父进程退出(可以防止会话组长重新申请打开终端)
关闭打开的文件描述符
改变当前工作目录chdir
清除进程的umask
PHP实现
/*** daemon(守护进程) PHP实现* @author zhjx922*/$pid = pcntl_fork();
if ($pid == -1) {die('创建子进程失败');
} else if ($pid) {//第一次退出父进程exit(0);
}//setsid
posix_setsid();echo "成功输出,脱离终端" . PHP_EOL;
sleep(5);$pid = pcntl_fork();
if ($pid == -1) {die('创建子进程失败');
} else if ($pid) {//第二次退出父进程(之前fork出来的子进程)exit(0);
}echo "依然可以输出" . PHP_EOL;
sleep(5);//关闭各种描述符
@fclose(STDOUT);
@fclose(STDERR);
$STDOUT = fopen('/dev/null', "a");
$STDERR = fopen('/dev/null', "a");chdir('/');umask(0);echo "这里不会输出, ps aux | grep daemon.php 查看进程,20s后退出" . PHP_EOL;
sleep(20);
日常使用已经注意事项
php daemon.php &
这样使用,当关闭终端后,当前php进程也会同时关掉nohup php daemon.php > daemon.log &
终端关闭后,依然会继续运行使用
supervisor
守护进程之PHP实现相关推荐
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路
原文地址: http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学 ...
- 8.node多进程之spawn
8.node多进程之spawn 1.spawn用法 spawn返回的是子进程,不具备回调功能,但是子进程可以处理结果 spawn是逐步输出结果的,如果某行出错了,那么该行错误被监听到,然后会继续往下执 ...
- Linux 守护进程一
守护进程是一个后台进程,它无需用户输入就能运行,经常是提供某种服务. LInux作为服务器,主要的进程也都是为系统或用户提供后台服务功能. 常见的守护进程有Web服务器.邮件服务器以及数据库服务器等等 ...
- linux精灵进程之crond
一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完 成操作系统后,默认会安装此服务工具,并且会自动启动c ...
- 进程之joinableQueue
joinableQueue 可翻译:为可join的队列 该队列相比普通的Queue的区别在于该对列额外增加的了join函数 join函数的作用: 该函数为阻塞函数,会阻塞直到等待队列中所有数据都被处理 ...
- 进程之wait函数和waitpid函数
一个进程终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个.这个进程 ...
- Linux操作系统:操作系统与进程之fork、相关状态、僵尸进程
文章目录 操作系统 什么是操作系统 操作系统如何管理 系统调用和库函数概念 为什么需要操作系统 进程 进程的概念 如何管理进程 一.描述 二.PCB 三.task_struct 进程相关操作 一.查看 ...
- SVCHOST.exe进程之谜
揭开SVCHOST.exe进程之谜 svchost.exe是nt核心系统的非常重要的进程,对于2000.xp来说,不可或缺.很多病毒.***也会调用它.所以,深入了解这个程序,是玩电脑的必修课之一. ...
- PHP多进程之pcntl扩展的使用详解
安装 1.编译php源码时加入 --enable-pcntl 2.在现有的环境下新增加扩展 cd php-version/ext/pcntl phpize ./configure && ...
最新文章
- Linux 磁盘挂载
- Web的桌面提醒(Popup)
- 【为自己相亲】单身小姐姐你在哪里,我是书豪,我在等你
- R绘制坡度图(Slope Chart)
- C++显式隐式构造函数
- sscanf 连续相同编辑符_基于单调栈的滑动窗口法求解“和至少为 K 的最短连续子数组”...
- 多维数组做参数,内存可以看做是线性的
- python 下采样和上采样
- Go语言 channel 管道 阻塞 死锁 经典问题
- Fortran: namelist
- 【3款文献阅读的插件】
- WIFI:802.11协议帧格式
- 手机计算机dj音乐,教你如何用手机制作电子音乐
- 一文带你深入了解,什么是深度学习及其工作原理
- `算法知识` 多边形, 凸多边形, 外接矩形
- 阿里 + 京东 Java 岗面试题概要(面试须知
- 快速搭建小程序,实现线上引流获客
- 添加删除选项ABCD,
- oim-server-web打包测试环境不起作用问题 vue+typeScript
- NODEMCU 固件编译
热门文章
- java使用内部类的好处及其初始化
- 《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目1
- 欣赏你的孩子(ZT)
- JUnit5 @Disabled测试示例
- 软件测试用例设计方法-等价类划分法
- Kali Linux破解WiFi教程
- 推挽输出和开漏输出_平台/输入amp;输出
- python func函数用法_python教程:3个非常有用的内置函数
- mysql mybatis 主键id_MyBatis+MySQL 返回插入的主键ID
- JavaScript面向对象编程理解