首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问Symfony2中的后台进程

访问Symfony2中的后台进程
EN

Stack Overflow用户
提问于 2015-02-03 13:15:50
回答 2查看 957关注 0票数 2

我想在Symfony2中创建一个后台进程,使用过程组件并在后台运行它,如下所示:

代码语言:javascript
复制
$process = new Process('php myfile.php --option1 --option2');
$process->start();

我想在这里运行的脚本将不确定地运行(while (true)或类似的东西),并且应该可以通过控制台命令或控制器执行。

问题是--我如何从与创建不同的上下文中访问Symfony中的这样一个过程(例如从控制器)?也就是说-没有原始的Process实例?假设对路由create_process的请求启动了该进程,那么对kill_process的请求应该会终止它。有可能吗?

我可以想到的一种方法是序列化流程对象并将其存储在数据库中,但是这个解决方案似乎存在很多问题。

EN

回答 2

Stack Overflow用户

发布于 2015-02-03 13:53:18

你不该这么做。

PHP是无状态的,每个请求都是完全唯一的。

我不知道Symfony进程是如何在内部工作的,但是AFAIK没有办法杀死通过exec()passthru()等执行的命令。

您可以阅读本节并找出它是否有用:http://symfony.com/doc/current/components/process.html#process-pid

如果没有,您仍然可以在启动进程时获得当前时间戳(例如1422971460),并定期检查是否存在一个名为"kill_1422971460“的文件,一旦它存在,就删除它并结束该进程。

但是我建议您为这类过程使用另一种编程语言,因为PHP不是为此设计的。此外,您还可以在apache和fcgi线程之间点击max_execution_time或超时值,这最终会扼杀您的进程。它不可靠,也不能很好地为你服务。

票数 0
EN

Stack Overflow用户

发布于 2015-02-03 13:55:06

我使用DaemonizableCommandBundle做了这样的事情:

它有一个EndlessCommand类,您可以扩展和创建一个命令,该命令可以在循环中执行某些操作,并且可以随时终止;它确实尝试优雅地终止迭代。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28299871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档