15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > php多进程编程详解

php多进程编程详解

时间:2023-05-26 16:18:02 | 来源:网站运营

时间:2023-05-26 16:18:02 来源:网站运营

php多进程编程详解:PHP的进程控制支持实现了Unix方式的进程创建, 程序执行, 信号处理以及进程的中断。 进程控制不能被应用在Web服务器环境,当其被用于Web服务环境时可能会带来意外的结果。

pcntl函数

<?php$pid = pcntl_fork();//父进程和子进程都会执行下面代码if ($pid == -1) { //错误处理:创建子进程失败时返回-1. die('could not fork');} else if ($pid) { //父进程会得到子进程号,所以这里是父进程执行的逻辑 pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。} else { //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。 exit();//子进程执行完后应该退出,不然会继续执行后面的逻辑}<?php echo "主进程/n"; $pid = pcntl_fork(); //父进程和子进程都会执行这些代码 if($pid == -1 ){ //创建子进程失败会返回-1 throw new Exception ('fork error on Task object'); }else if($pid){ //创建成功会父进程会得到子进程的pid echo "等待子进程执行"; pcntl_wait($status);//等待子进程中断 echo "子进程执行状态:"; echo "是否正常退出:",pcntl_wifexited($status),"/n"; echo "子进程返回的代码:",pcntl_wexitstatus($status),"/n";//仅在pcntl_wifexited返回true时生效,只能是int,输出123 echo "子进程是否是由于某个未捕获的信号退出的:",pcntl_wifsignaled($status),"/n";//如果是kill -9|-15 杀死的进程返回true echo "导致子进程中断的信号:",pcntl_wtermsig($status),"/n"; 输出 9 | 15 var_dump($status); }else{ //创建成功子进程会得到pid=0 sleep(2); echo "子进程执行完毕/n"; exit(123) }<?php echo "设置3秒之后发送闹钟信号/n";pcntl_alarm(3); function dealSigalarm(){ echo "收到信号 SIGALRM /n退出程序。。。/n"; exit();} echo "安装信号处理器/n";pcntl_signal(SIGALRM,"dealSigalarm");//对于不能被阻塞、处理和忽略的信号,php为这些事件注册信号处理函数会产生一个致命错误 SIGSTOP,SIGKILLvar_dump(pcntl_signal_get_handler(SIGUSR1));//输出dealSigalarmpcntl_signal(SIGUSR1,function(){ echo "收到用户自定义信号/n";});$i = 1;while(1){ sleep(1); echo $i++,"/n"; echo "分发... /n"; pcntl_signal_dispatch();};<?php /** * php进程的优先级 */ for($i = 1;$i<=5;$i++){ $pid = pcntl_fork(); if($pid == -1){ throw new Exception("fork error on task object"); }else if ($pid){ pcntl_wait($status); }else{ $end_time = time()+3; $k = 0; while(time()<=$end_time){ $k++; } $pid = getmypid(); echo "当前进程id:".$pid,"优先级:",pcntl_getpriority($pid); pcntl_setpriority($i); echo "修改之后的优先级为:",pcntl_getpriority(),"/n"; echo "执行了进程{$i} {$k}次/r/n"; exit(); } }以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

或 者关注咱们下面的本站专栏

关键词:进程

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭