【问题标题】:Create a background process in php在php中创建一个后台进程
【发布时间】:2013-05-15 02:22:44
【问题描述】:

我正在开发一个网站,我们希望用户能够在服务器上创建新进程并与服务器交互。例如,用户想要运行 C 代码:

#include<sdio.h>

int main()
{
    int a;
    scanf("%d", &a);
    printf("%d", a);
}

在服务器中,我们创建一个进程并使其保持活动状态,直到该进程停止运行。当使用像exec 这样的函数时,我们不能做scanf 的事情。使用proc_open 时,我们无法让子进程保持活动状态......或者我们可以但我们不知道如何......

流程可以是:用户发送指令->服务器创建一个新进程来执行指令->执行指令时,服务器发送stdout到网页并从用户输入中获取stdin->进程停止运行..

【问题讨论】:

  • 感觉像是WebSocket 的工作...
  • Gearman 与 Supervisor 相结合可能会完成这项工作和/或类似 RabbitMQ/ZeroMQ 之类的东西,用于 Web 服务器和其他组件之间的异步通信。
  • @Passerby 是否可以创建一个可以继续运行的子进程?子进程如何在不使用proc_openexecpopen等的情况下运行上面的代码...我没有尝试过WebSocket..
  • @jamie0726 这不仅仅是一个交流的东西,而是在运行 shell 用户给出后保持子进程运行.. 它与齿轮人有点不同..
  • @dahui 问题是没有在后台运行进程;这是该过程必须与用户保持交互,因此用户必须与服务器保持实时连接。 HTTP 协议主要是一种请求和响应的风格,这不是很擅长。

标签: php process


【解决方案1】:

我有一个定制的芯片和引脚解决方案,它在 exec 调用中使用“&”启动后台 PHP CLI 脚本。然后,前端和后台脚本通过简单地通过 2 个 ascii 文件传递​​字符串进行通信。 这是粗略但有效的。 显然,两个进程都必须检查/读取其传入文件,决定做什么(例如,在后台进程上执行您的 C++ 代码),然后在必要时通过写入其输出文件来响应。将这三个步骤放入一个循环中,您就有了一个粗略的监听器/守护程序。 由于后台作业必须同时侦听作为授权服务通信通道的套接字,这使情况变得更加复杂。 这是一个单用户场景,但可以通过使用唯一文件或写入键控数据库表来适应多用户。

调用如下所示:

exec ("php mydaemon.php 2>&1>/dev/null &");

我假设一个 Linux 服务器 - 因此 linux "&" 指令在后台运行。 2>&1>/dev/null 只是抑制标准输出和标准错误。

不太确定如何在 Windows 中解决它 - 但必须有 Wscript 或 VBscript 等价物??

【讨论】:

  • 感谢您的关注。实际上服务器是在 Ubuntu 上运行的。我假设只要它的PID可用,就可以(以某种方式)控制后台进程?我对linux系统了解不多:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
相关资源
最近更新 更多