Пишу php демона с использованием pcntl_fork, постоянно выскакивает ошибка MySQL has gone away. Понятно что после exit() в дочернем процессе уничтожается соединение, но решение так и не могу найти...
В обычном mysql_connect то есть параметр new_link, который создает новое соединение, но много уж написано с Zend_Db.
Еще думал вместо exit использовать posix_kill(posix_getpid(), SIGTERM) - но заметил что тогда зомби-процессы порождаются.
Соединение с БД надо устанавливать после форка, в каждом процессе - свое.
Не знаток зенда, но думаю что там можно явно понять, в какой момент происходит установка соединения с БД. И вот эти действия (приводящие к созданию подключения к БД) надо делать в каждом дочернем процессе отдельно.
Еще могу порекомендовать отказаться от форков вообще и "демонизировать" php с помощью supervisord. На мой взгляд гораздо лучше и удобнее решение, к тому же дополнительные плюшки получите из коробки.
Так то оно так, но что если соединения не только в БД, но и AMQP, memcache и прочее? SIGTERM помогает, но нужно обрабатывать корректно в parent-процессе закрытие.