У меня есть сервер, который прослушивает соединения сокетов и выполняет различные действия в зависимости от запроса. Один из них — долгоживущие запросы к базе данных, для которых сервер разветвляется.
Сервер ведет журнал всех активных дочерних элементов, и всякий раз, когда его просят завершить работу, он убивает всех своих дочерних элементов перед выходом. Пару раз я сталкивался с ситуацией, когда сервер падал или был некрасиво убит, что приводило к тому, что дочерний процесс становился сиротой. Если я попытаюсь снова вернуть сервер, он откажется сказать, что прослушивающий сокет не может выполнить привязку, потому что этот адрес/порт уже привязан.
Я ищу способ улучшить такую ситуацию, чтобы основной серверный процесс мог вернуться сразу. Я пытался отслеживать существование родителя от дочернего элемента и выходить, как только он ушел, но это привело только к зомби-процессам, и сокет, похоже, все еще связан.
Сервер написан на Python, но приветствуются любые объяснения или предложения на любом языке.