Home > Backend Development > PHP Tutorial > mysql - 关于开启PHP多进程与它们之间的通信问题

mysql - 关于开启PHP多进程与它们之间的通信问题

WBOY
Release: 2016-06-06 20:45:27
Original
1256 people have browsed it

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

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

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

回复内容:

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

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

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

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

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

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

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

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

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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template