PHP和多线程

时间:2016-08-09 19:23:01

标签: php

我在想。如果您有PHP请求,并且PHP代码通过exec ..

调用命令行工具

然后命令行是在另一个线程中处理的,而不是运行PHP脚本的那个线程吗?

如果是这样的话,是否共享多个核心?

1 个答案:

答案 0 :(得分:1)

作为manual suggests

  

如果使用此功能启动程序,为了使其在后台继续运行,必须将程序的输出重定向到文件或其他输出流。如果不这样做将导致PHP挂起,直到程序执行结束。

这可能会让您知道该进程未分叉并在主线程上运行。 PHP实际上等待输出结束并获取日志的最后一行。

但是,有一种方法可以在后台运行命令:

nohup MY_COMMAND > /dev/null 2>&1 & echo $!

由于exec收到输出的最后一行的值,这将返回流程的pid,您稍后可以kill

<小时/> 另外,作为N.B.在评论中提到,如果使用fpm - FastCGI Process Manager,则可以使用fastcgi_finish_request()函数。

该函数在不停止脚本执行的情况下为客户端提供答案。例如,这是您在没有fpm的情况下发送电子邮件的方式:

mail($recipient, 'Subject', 'Hello, Kitty!');
echo 'Okay, we sent the e-mail';

这就是您发送包含fpm的电子邮件的方式:

echo 'Okay, we sent the e-mail';
fastcgi_finish_request();
mail($recipient, 'Subject', 'Hello, Kitty!');

在这种情况下,客户端将获得回显的文本,mail函数仍将在后台运行。

在使用session_write_close();之前,请不要忘记使用fpm关闭会话;)