【问题标题】:PHP Non-blocking child process that terminates with parentPHP非阻塞子进程与父进程终止
【发布时间】:2015-12-09 19:37:01
【问题描述】:

环顾了一会儿,我还没有找到我认为很简单的事情的答案。

我正在使用 PHP 进行编码,我需要从父进程启动一个子进程。子进程必须是非阻塞的:父进程应该能够在子进程在后台运行时继续进行处理。 (请注意,我不能使用进程分叉,因为父进程和子进程不是同一个进程。)一旦父进程完成处理或意外崩溃,子进程应该终止。

我目前使用分离的子进程实现了这个,它工作得很好……也就是说,直到父进程崩溃。随着时间的推移,如果许多父进程崩溃,一组未终止的子进程就会像一群愤怒的野蛮人一样肆虐系统。

我无法检查一个孤立的子进程是否已经在运行并在启动父进程之前终止它 - 可能有其他父进程与他们自己的子进程一起运行,并且无法判断哪个父进程正在使用哪个子进程以及哪个子进程一个孤儿。

任何帮助将不胜感激!

【问题讨论】:

  • 让子进程每 X 秒检查一次父进程是否处于活动状态
  • 如果你不能使用分叉,你是如何进行父/子处理的?为什么不能使用分叉?如果您一开始就无法使用执行此操作的工具,您如何期望模拟过程控制?另外..没有一些代码来尝试重现这种行为,我们只能猜测 - 正如你所看到的,第二个评论者已经开始询问为什么不从一开始就这样做。

标签: php nonblocking child-process


【解决方案1】:

根据 N.B. 的评论并且不知道这是如何编码的,我对如何处理它的唯一建议是来自崩溃处理。它是否因抛出异常而崩溃,您可以在父类中或从管理父类的位置捕获。如果是这样,您可以从那里的异常处理程序中关闭您的子进程吗?也许您仍然应该有某种句柄来从那里访问子进程。

【讨论】:

  • 是的,崩溃是由于子级故障引起的父级异常引起的。谢谢你的提示。这就是我最终所做的。
猜你喜欢
  • 2011-03-17
  • 2014-03-23
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多