Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Symfony2中访问后台进程_Php_Symfony_Process_Symfony Process - Fatal编程技术网

Php 在Symfony2中访问后台进程

Php 在Symfony2中访问后台进程,php,symfony,process,symfony-process,Php,Symfony,Process,Symfony Process,我想使用在Symfony2中创建一个后台进程,并在后台运行它,如下所示: $process = new Process('php myfile.php --option1 --option2'); $process->start(); 我想在这里运行的脚本将不可靠地运行(while(true)或类似的东西),并且应该可以从控制台命令或控制器终止 问题是-如何在Symfony中(例如,从控制器)从与创建时不同的上下文访问此类流程?也就是说,没有原始的流程实例?假设对路由create\u进程

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

$process = new Process('php myfile.php --option1 --option2');
$process->start();
我想在这里运行的脚本将不可靠地运行(
while(true)
或类似的东西),并且应该可以从控制台命令或控制器终止

问题是-如何在Symfony中(例如,从控制器)从与创建时不同的上下文访问此类流程?也就是说,没有原始的
流程
实例?假设对路由
create\u进程的请求启动该进程,那么对
kill\u进程的请求应该会终止该进程。有可能吗

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

您不应该这样做

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

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

您可以阅读本节并了解它是否有帮助:

如果没有,您可以在启动流程时获取当前时间戳(例如1422971460),并定期检查是否存在名为“kill_1422971460”的文件,一旦存在,就将其删除并结束流程


但我建议您使用另一种编程语言来处理这类过程,因为PHP并不是专门为此而设计的。您还可以点击
max\u execution\u time
或apache和fcgi线程之间的超时,这将终止您的进程。它不可靠,也不能很好地为您服务。

我使用DaemonizableCommandBundle做过类似的事情:

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