PHP中的异步shell exec

新手上路,请多包涵

我有一个 PHP 脚本,它需要调用一个 shell 脚本,但根本不关心输出。 shell 脚本进行了许多 SOAP 调用并且完成速度很慢,所以我不想在 PHP 请求等待回复时减慢它的速度。事实上,PHP 请求应该能够在不终止 shell 进程的情况下退出。

我研究了各种 exec()shell_exec()pcntl_fork() 等功能,但它们似乎都没有提供我想要的功能。 (或者,如果他们这样做,我不清楚怎么做。)有什么建议吗?

原文由 AdamTheHutt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 871
2 个回答

如果它“不关心输出”,是否不能使用 & 调用脚本的 exec 以使进程成为后台?

编辑- 结合 @AdamTheHut 对此帖子的评论,您可以将其添加到对 exec 的调用中:

 " > /dev/null 2>/dev/null &"

That will redirect both stdio (first > ) and stderr ( 2> ) to /dev/null and run in the背景。

还有其他方法可以做同样的事情,但这是最简单的阅读方式。


上述双重重定向的替代方案:

 " &> /dev/null &"

原文由 warren 发布,翻译遵循 CC BY-SA 3.0 许可协议

我还发现 Symfony Process Component 对此很有用。

 use Symfony\Component\Process\Process;

$process = new Process('ls -lsa');
// ... run process in background
$process->start();

// ... do other things

// ... if you need to wait
$process->wait();

// ... do things after the process has finished

在其 GitHub 存储库 中查看它是如何工作的。

原文由 Anton Pelykh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题