簡體   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