Не возможный в целом, если Вы не используете некоторый внешний сервис.
Когда вы разделяете соединения с базой данных между процессами (это то, что вы делаете с вилкой), вам необходимо убедиться, что один процесс не закройте его из-под другого. Поскольку соединения также являются переменными, когда интерпретатор Perl завершает работу, он вызывает метод DESTROY этого объекта, который в этом случае закроет соединение.
Итак, если кто-либо из дочерних элементов закроет соединение с базой данных (что произойдет, когда они finish и shutdown) он убьет его из-под родительского процесса. Способ предотвратить это - установить InactiveDestroy
в значение true в родительском процессе до вилки, а затем явно закрыть соединение в родительском процессе, когда это будет сделано.
Вы напрашиваетесь на проблему, используя один и тот же дескриптор базы данных одновременно во всех дочерних процессах. Вы должны создавать новое соединение в каждом ребенке.
Неважно ... Я прочитал остальную часть кода.