Расширение PCNTL предназначено для работы только в CLI; Вы не можете использовать его в других серверных средах (fpm, mod_php и т. д.).
Предполагается, что расширения, помеченные как «cli», предназначены только для статического связывания с двоичным файлом CLI или для загрузки общего доступа в CLI и исключены из общих сборок, ориентированных на другие SAPI (libphp7.so).
Файл autoconf (ext/pcntl/config.m4), который настраивает PCNTL для PHP, должен указать процессу сборки запретить загрузку PCNTL в других SAPIS, так получилось, что 1) это не очень хорошо и 2) это не было учитывалось, когда FPM был объединен с PHP: чтобы FPM игнорировал его и связывался с исходным кодом PCNTL в любом случае (если расширение включено во время компиляции), а другие SAPI позволяли вам загружать библиотеку, если она является общей, потому что DSO (общая библиотека) сама по себе не налагает ограничения SAPI. Ни одна из этих вещей (связывание FPM и загрузка других) не должна быть разрешена, и это ужасная идея заставить неподдерживаемый SAPI загружать PCNTL.
Когда вы разветвляете процесс, вы создаете клон процесса, который называется fork, с копированием при записи: внутри Apache или FPM это означает дублированные дескрипторы файлов (сокетов), которыми вы не можете изящно управлять в дочернем процессе (поскольку у вас нет доступ к ним из PHP).
Причина, по которой это должно быть ограничено CLI (и ранней CGI), заключается в том, что эти SAPI используют единую модель процесса. Хотя технически FPM является CGI-интерфейсом, он, безусловно, не является единым процессом, и поэтому никогда не будет подходящей средой для разветвления пользовательской земли.
person
Joe Watkins
schedule
27.01.2016