代码完成后,php在Windows上挂起

时间:2011-06-09 16:05:56

标签: php windows hang

我们只将PHP用作脚本解释器(没有Apache / IIS)。我们遇到过PHP.exe进程在代码完成后挂起的情况。我可以确认最后一行代码已经执行(例如,返回代码的控制台回显),但PHP.exe进程仍然存在。虽然代码在某些点上确实使用了exec()和passthru(),但是日志记录确认控件被传递回PHP进程并且它继续快速地继续运行。

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

  • 的php.exe + 0x2d78
  • NTDLL.DLL!RtlSetLastWin32ErrorAndNtStatusFromNtStatus + 0×59
  • mswsock.dll + 0x58ab

在所有情况下,地址点始终相同。所有三个线程报告“State:Wait:UserRequest”,并且php.exe和ntdll.dll线程具有相同的开始时间,而mswsock.dll在几秒钟后启动。使用Process Hacker的“分析”功能来查看它们悬挂的原因,它表示没有一个线程似乎在等待。

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

关于可能会发生什么的任何其他想法?

1 个答案:

答案 0 :(得分:0)

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

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

我不知道你在那里使用了哪些代码,但在使用套接字时(例如,通过SMTP直接发送电子邮件),它可以正常工作。