(1).学习目标:
了解常见信号类型(百度PHP支持的信号类型),
(2).相关函数学习:
(2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信号时执行
(2.2).pcntl_signal_dispatch函数用于调用所有的信号管理器.
延伸:可以设置多个信号管理器,然后让pcntl_signal_dispatch函数批量调用.由于pcntl_signal_dispatch函数内部没有挂起,所以需要我们while(true)执行它
(3).代码案例
(3.1).创建SIGTERM信号监听(当使用kill进程命令时会想进程发送SIGTERM信号)
<?php
//安装SIGTERM信号管理
pcntl_signal(SIGTERM, function () {
var_dump('好像有人要Kill我,有点慌');
});
//调用等待信号的处理器
while (true)
{
pcntl_signal_dispatch();
}解析:通过简单的例子我们知道信号管理可以帮助我们在多进程开发中根据信号类型来响应操作.例如我希望用户kill我时候上报日志等信息。
(3.2).监听Linux的闹钟信号,实现定时器.(pcntl_alarm函数为进程设置闹钟信号,参数是秒)
<?php
pcntl_signal(SIGALRM, function () {
//设置的闹钟信号只能响应1次.于是我在这里再次设置
pcntl_alarm(5);
echo '5秒后我被执行了' . PHP_EOL;
//可以编写需要重复执行的代码
}, false);
pcntl_alarm(5);
while (true)
{
pcntl_signal_dispatch();
}解析:由于设置的闹钟信号只能接收1次,于是在接收的地方可以再次设置闹钟,时间循环执行的定时器。第一章有学习非阻塞的多进程,可以配合多进程实现多进程定时任务管理
常见的PHP优化方法,让PHP效率更高,抽空更新(很多都是学习网络上的方法,想深度理解建议学C语言。):字符串的输出最好使用单引号,不要使用双银行,否则PHP会去找是否存在变量需要解析大数组,对象,资源句柄使用完及时进行unset()能用系统函数解决的问题尽量不要使用正则表达式,虽然正则表达式逼格高...
开启错误提示代码:ini_set("display_errors", "On"); error_reporting(E_ALL | E_STRICT);关闭错误提示代码:error_reporting(E_ALL ^&n...
在使用ftok生成ipc进程通信key尝试将第二个参数项目标识符传入字符串报错:PHP Warning: ftok(): Project identifier is invalid,查阅资料发现第二个字符串只能是1个字符串,长度为1....
elasticsearch的操作都是基于http协议的,已经有现成的php类库,composer安装即可。{ "require": { &...
本教程使用的定时任务基于EasyTak,EasyTask官方文档:https://gitee.com/392223903/EasyTask由于tp3.2.x官方开发未考虑命令行支持和绝对路径开发的标准,因此我编写了一个支持的类来运行。1.在tp3.2.3根目录下安装easytaskcomposer&...
【一】.无锁场景:多个人购买一件商品,库存减少。商品表:主键 商品名 库存数量 id name stock 1&nb...