PHP进程信号处理

  php有一组进程控制函数PCNTL,使得php能在*nix系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。

注意:pcntl这个扩展仅在cli/cgi模式下可用。mod_php和php-fpm中不可以使用。在web server环境中不要使用这组函数,因为会导致不可预料的结果。另,windows作为非类unix系统,没有这些函数。

ticks

  PCNTL 使用ticks来作为信号处理机制(signal handle callback mechanism),可以最小程度地降低处理异步事件时的负载。何谓ticks?Tick 是一个在代码段中解释器每执行 N 条低级语句就会发生的事件,这个代码段需要通过declare来指定。

下面是一个隔5秒发送一个SIGALRM信号,并由signal_handler函数获取,然后打印一个“SIGALRM”的例子:

<?php
declare(ticks = 1); function signal_handler($signal) {
echo "SIGALRM".date("Y-m-d H:i:s",time()).PHP_EOL;
pcntl_alarm(5);
} //安装闹钟信号触发器
pcntl_signal(SIGALRM, "signal_handler", true);
pcntl_alarm(5); //5秒后向进程发送一个SIGALRM信号 while(true){ } ?>

  其实官方的pcntl_signal性能极差,主要是PHP的函数无法直接注册到操作系统信号设置中,所以pcntl信号需要依赖tick机制来完成。 pcntl_signal的实现原理是,触发信号后先将信号加入一个队列中。然后在PHP的ticks回调函数中不断检查是否有信号,如果有信号就执行PHP中指定的回调函数,如果没有则跳出函数。 ticks=1表示每执行1行PHP代码就回调此函数。实际上大部分时间都没有信号产生,但ticks的函数一直会执行。 比较好的做法是去掉ticks,转而使用pcntl_signal_dispatch,在代码循环中自行处理信号。

pcntl_signal_dispatch

PHP进程信号处理的更多相关文章

  1. PHP系统编程--PHP进程信号处理(转)

    原地址:https://www.cnblogs.com/linzhenjie/p/5485436.html PHP的pcntl扩展提供了信号处理的功能,利用它可以让PHP来接管信号的处理,在开发服务器 ...

  2. PHP系统编程--03.PHP进程信号处理

    PHP的pcntl扩展提供了信号处理的功能,利用它可以让PHP来接管信号的处理,在开发服务器端守护进程方面,信号处理至关重要. 函数原型 bool pcntl_signal(int $signo ,c ...

  3. docker 进程监控 Dumb-Init进程信号处理 --转自https://blog.csdn.net/tiger435/article/details/54971929

    随着docker及Kubernetes技术发展的越来越成熟稳定,越来越多的公司开始将docker用于生产环境的部署,相比起物理机上直接部署,多了一层docker容器的环境,这就带来一个问题:进程信号接 ...

  4. 理解Docker容器的进程管理

    摘要: Docker在进程管理上有一些特殊之处,如果不注意这些细节中的魔鬼就会带来一些隐患.另外Docker鼓励"一个容器一个进程(one process per container)&qu ...

  5. docker进程管理

    docker进程管理:http://www.open-open.com/lib/view/open1455412749917.html 写的太好!!!!示例很清楚,很全面!! 我做个summary吧. ...

  6. Linux进程创建和结束

    在Linux中,进程的创建由系统调用fork和vfork完成.它们生成一个子进程并且子进程是父进程的一个复制品. Fork系统调用对应的kernel函数是sys_fork,此函数简单的调用kernel ...

  7. Linux下进程的创建过程分析(_do_fork do_fork详解)--Linux进程的管理与调度(八)

    Unix标准的复制进程的系统调用时fork(即分叉),但是Linux,BSD等操作系统并不止实现这一个,确切的说linux实现了三个,fork,vfork,clone(确切说vfork创造出来的是轻量 ...

  8. docker 进程 转载:https://www.cnblogs.com/ilinuxer/p/6188303.html

    今天我们会分析Docker中进程管理的一些细节,并介绍一些常见问题的解决方法和注意事项. 容器的PID namespace(名空间) 在Docker中,进程管理的基础就是Linux内核中的PID名空间 ...

  9. docker 进程 转载:

    今天我们会分析Docker中进程管理的一些细节,并介绍一些常见问题的解决方法和注意事项. 容器的PID namespace(名空间) 在Docker中,进程管理的基础就是Linux内核中的PID名空间 ...

随机推荐

  1. 2D图形如何运动模拟出3D效果

    一.先看看实现效果图 (左边的2d图片如何运动出右边3d的效果)                                      引言: 对于这个题目,真的很尴尬,不知道取啥,就想了这个题目 ...

  2. Azure Devops/Tfs 编译的时候自动修改版本号

    看到阿迪王那边出品了一个基于Azure Devops自增版本号  链接 http://edi.wang/post/2019/3/1/incremental-build-number-for-net-c ...

  3. 再好好聊聊 HTTP 里的 Cookie | 实用 HTTP

    题图:by Juan Pablo Arenas 一.序 Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Hea ...

  4. 『性能』ServiceStack.Redis 和 StackExchange.Redis 性能比较

    背景 近来,需要用到 Redis 这类缓存技术 —— MongoDB 和 Redis 没有进行过比较. 我也懒得在这些细节上 纠结那么多 —— 按照网友给出的文章,听从网友建议,选择 Redis. R ...

  5. 视频当道的时代,这些珍藏的优质 Python 播客值得推荐

    我国互联网的发展道路与欧美不同,在内容的形式上,我们似乎实现了跨越式的发展——早早进入了移动互联网时代,直播和短视频等形式的内容成为了潮流,而文字形式的博客(blog)与声音形式的播客(podcast ...

  6. Java集合 - List介绍及源码解析

    (源码版本为 JDK 8) 集合类在java.util包中,类型大体可以分为3种:Set.List.Map. JAVA 集合关系(简图) (图片来源网络) List集合和Set集合都是继承Collec ...

  7. 2025战略,中秋送福利!免费开源ERP Odoo Windows 一键傻瓜式安装版发布

    概述 为了帮助更多的小白,能够快速的体验Odoo的强大功能,针对国内大多数小白用户无法快速直接体验Odoo的尴尬,开源智造呕心沥血,历经数百次的测试和整合终于赶在中秋节这天将Odoo所需要的复杂运行环 ...

  8. 高通QCC3026蓝牙音频芯片处理器介绍

    QCC3026是一款基于超低功耗架构的入门级闪存可编程蓝牙音频SoC,专为紧凑型功能优化的Qualcomm TrueWireless耳塞而设计.QCC3026旨在为我们的客户提供有助于缩短开发时间并具 ...

  9. Windows系统ping本地虚拟机~

    虚拟机左上角[编辑]>>>[虚拟网络编辑器] [VMnet1]>>>子网ip:192.168.124.0 子网掩码:255.255.255.0 [VMnet8]&g ...

  10. JavaScript Date 对象 实现 时间戳=>日期对象 ,时间戳=>字符串,字符串=>时间戳,获取一年内所有的星期

    由于业务需求要写一个日历,日历好写,但是,要标出周六和周日为红色,用到的部分核心函数如下: <script> /* *时间戳=>日期对象 * return Number * */ f ...