我在想。如果您有PHP请求,并且PHP代码通过exec
..
然后命令行是在另一个线程中处理的,而不是运行PHP脚本的那个线程吗?
如果是这样的话,是否共享多个核心?
答案 0 :(得分:1)
如果使用此功能启动程序,为了使其在后台继续运行,必须将程序的输出重定向到文件或其他输出流。如果不这样做将导致PHP挂起,直到程序执行结束。
这可能会让您知道该进程未分叉并在主线程上运行。 PHP实际上等待输出结束并获取日志的最后一行。
但是,有一种方法可以在后台运行命令:
nohup MY_COMMAND > /dev/null 2>&1 & echo $!
由于exec
收到输出的最后一行的值,这将返回流程的pid
,您稍后可以kill
。
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
关闭会话;)