首頁 >後端開發 >php教程 >mysql - 关于开启PHP多进程与它们之间的通信问题

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

WBOY
WBOY原創
2016-06-06 20:45:271269瀏覽

我们通常在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之后开始支持多线程了

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn