什么是守护进程

守护进程(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实现相关推荐

  1. 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

    原文地址: http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学 ...

  2. 8.node多进程之spawn

    8.node多进程之spawn 1.spawn用法 spawn返回的是子进程,不具备回调功能,但是子进程可以处理结果 spawn是逐步输出结果的,如果某行出错了,那么该行错误被监听到,然后会继续往下执 ...

  3. Linux 守护进程一

    守护进程是一个后台进程,它无需用户输入就能运行,经常是提供某种服务. LInux作为服务器,主要的进程也都是为系统或用户提供后台服务功能. 常见的守护进程有Web服务器.邮件服务器以及数据库服务器等等 ...

  4. linux精灵进程之crond

    一.crond简介  crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完 成操作系统后,默认会安装此服务工具,并且会自动启动c ...

  5. 进程之joinableQueue

    joinableQueue 可翻译:为可join的队列 该队列相比普通的Queue的区别在于该对列额外增加的了join函数 join函数的作用: 该函数为阻塞函数,会阻塞直到等待队列中所有数据都被处理 ...

  6. 进程之wait函数和waitpid函数

    一个进程终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个.这个进程 ...

  7. Linux操作系统:操作系统与进程之fork、相关状态、僵尸进程

    文章目录 操作系统 什么是操作系统 操作系统如何管理 系统调用和库函数概念 为什么需要操作系统 进程 进程的概念 如何管理进程 一.描述 二.PCB 三.task_struct 进程相关操作 一.查看 ...

  8. SVCHOST.exe进程之谜

    揭开SVCHOST.exe进程之谜 svchost.exe是nt核心系统的非常重要的进程,对于2000.xp来说,不可或缺.很多病毒.***也会调用它.所以,深入了解这个程序,是玩电脑的必修课之一. ...

  9. PHP多进程之pcntl扩展的使用详解

    安装 1.编译php源码时加入 --enable-pcntl 2.在现有的环境下新增加扩展 cd php-version/ext/pcntl phpize ./configure && ...

最新文章

  1. Linux 磁盘挂载
  2. Web的桌面提醒(Popup)
  3. 【为自己相亲】单身小姐姐你在哪里,我是书豪,我在等你
  4. R绘制坡度图(Slope Chart)
  5. C++显式隐式构造函数
  6. sscanf 连续相同编辑符_基于单调栈的滑动窗口法求解“和至少为 K 的最短连续子数组”...
  7. 多维数组做参数,内存可以看做是线性的
  8. python 下采样和上采样
  9. Go语言 channel 管道 阻塞 死锁 经典问题
  10. Fortran: namelist
  11. 【3款文献阅读的插件】
  12. WIFI:802.11协议帧格式
  13. 手机计算机dj音乐,教你如何用手机制作电子音乐
  14. 一文带你深入了解,什么是深度学习及其工作原理
  15. `算法知识` 多边形, 凸多边形, 外接矩形
  16. 阿里 + 京东 Java 岗面试题概要(面试须知
  17. 快速搭建小程序,实现线上引流获客
  18. 添加删除选项ABCD,
  19. oim-server-web打包测试环境不起作用问题 vue+typeScript
  20. NODEMCU 固件编译

热门文章

  1. java使用内部类的好处及其初始化
  2. 《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目1
  3. 欣赏你的孩子(ZT)
  4. JUnit5 @Disabled测试示例
  5. 软件测试用例设计方法-等价类划分法
  6. Kali Linux破解WiFi教程
  7. 推挽输出和开漏输出_平台/输入amp;输出
  8. python func函数用法_python教程:3个非常有用的内置函数
  9. mysql mybatis 主键id_MyBatis+MySQL 返回插入的主键ID
  10. JavaScript面向对象编程理解