繁体   English   中英

php 在代码完成后挂在 Windows

[英]php hangs on Windows after code completion

我们仅将 PHP 用作脚本解释器(无 Apache/IIS)。 我们遇到了 PHP.exe 进程在代码完成后挂起的情况。 我可以确认最后一行代码已执行(例如,向控制台回显返回代码)但 PHP.exe 进程仍然存在。 尽管代码在某些时候确实使用了 exec() 和 passthru(),但日志记录确认控制权已传递回 PHP 进程,并且它继续愉快地前进。

使用 Process Hacker,我发现总是有这三个线程在运行:

  • php.exe+0x2d78
  • ntdll.dll!RtlSetLastWin32ErrorAndNtStatusFromNtStatus+0x59
  • mswsock.dll+0x58ab

在所有情况下,地址点始终相同。 所有三个线程都报告“状态:等待:用户请求”,并且 php.exe 和 ntdll.dll 线程具有相同的启动时间,而 mswsock.dll 会在几秒钟后启动。 使用 Process Hacker 的“分析”功能查看它们为何挂起,它表明没有任何线程似乎在等待。

我觉得奇怪的是 mswsock.dll 在其他人之后开始 - 不知道为什么会这样,因为代码已经完成。 但在我看来,php.exe 正在使用 SetLastError() 导出来记录最后一个错误代码,但它无法完成?

关于这里可能发生的任何其他想法?

您使用哪个版本的 PHP - 线程安全或非线程安全以及哪个版本?

如果答案是“线程安全”并且因为您仅在 CLI 模式下使用它,我建议使用非线程安全构建。

我不知道您在那里使用哪个代码,但在使用 sockets 时它在这里工作正常(例如,直接通过 SMTP 发送 email)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM