素材牛VIP会员
关于开启PHP多进程与它们之间的通信问题
 马***0  分类:SQL代码  人气:799  回帖:4  发布于6年前 收藏

我们通常在Linux上调用PHP来执行定时任务,如php -f xxx.php,有时候需要先有一个PHP父进程,然后开启多个PHP子进程来做同一件事...

如果这时候当其中一个子进程结束或出现问题时通知父进程,父进程就可以做一些事,如关闭其它正在运行的进程等等吧....

想了解一下大家在此类问题上是怎么实现或处理的?

讨论这个帖子(4)垃圾回帖将一律封号处理……

Lv5 码农
zz***25 其它 6年前#1

我一般用php daemon来做,一个进程作为父进程一直跑着(可能是个while + sleep),父进程判断时间到了,就fork一个/多个子进程来处理业务,这时父进程监听子进程退出信号,子进程业务执行完了就退出了,这时父进程会检测到,直到所有子进程退出。

一个原则就是父进程尽可能简单,不要处理业务逻辑,从而保证父进程的稳定性。子进程去处理业务,即使出现FataErr也不会导致所有进程退出。

还有个小提示:信号是可以被覆盖的,也就是说两个子进程退出时,父进程可能只收到一个信号,这时父进程应该用while循环来处理子进程退出事件

Lv3 码奴
tu***23 其它 6年前#2

用筷子炒菜不知道是什么样的感觉?

Lv3 码奴
路***6 Web前端工程师 6年前#3

http://cn2.php.net/manual/zh/function.pcntl-waitpid.php
php手册还是非常有学习价值的

Lv3 码奴
te***es 产品经理 6年前#4

题主会了吗?我这边用了下pcntl这个方法,貌似要捕获子进程状态的时候父进程就会被阻塞,不过PHP从5.3之后开始支持多线程了

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取