php зависает в Windows после завершения кода - PullRequest
0 голосов
/ 09 июня 2011

Мы используем PHP только как интерпретатор сценариев (без Apache / IIS). Мы столкнулись с ситуацией, когда процесс PHP.exe зависает после завершения кода. Я могу подтвердить, что была выполнена последняя строка кода (например, эхо-сообщение на консоль кода возврата), но процесс PHP.exe остается. Хотя в некоторых случаях код использует exec () и passthru (), ведение журнала подтверждает, что управление передано обратно процессу PHP и продолжается весело на протяжении всего пути.

Используя Process Hacker, я обнаружил, что всегда выполняются следующие три потока:

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

Адресные точки всегда одинаковы во всех случаях. Все три потока сообщают «Состояние: ожидание: UserRequest», а потоки php.exe и ntdll.dll имеют одинаковое время запуска, а mswsock.dll запускается через несколько секунд. Используя способность Process Hacker «Анализировать», чтобы увидеть, почему они зависают, он говорит, что ни один из потоков не ожидает.

Мне кажется странным, что mswsock.dll запускается после других - не знаю, почему это произойдет, так как код завершен. Но мне кажется, что php.exe использует экспорт SetLastError () для записи последнего кода ошибки, но не может завершиться?

Есть еще идеи о том, что здесь может происходить?

1 Ответ

0 голосов
/ 09 июня 2011

Какую версию PHP вы используете - Thread Safe или Non Thread Safe, а какую версию?

Если ответ «Thread Safe» и поскольку вы используете его только в режиме CLI, я бы порекомендовалиспользуя Non Thread Safe build.

Я не знаю, какой код вы там используете, но он отлично работает здесь при использовании сокетов (например, отправка электронной почты напрямую через SMTP).

...