У меня следующая ситуация (псевдокод):
function f:
pid = fork()
if pid == 0:
exec to another long-running executable (no communication needed to that process)
else:
return "something"
f
предоставляется через сервер XmlRpc ++ . Когда функция вызывается через XML-RPC, родительский процесс печатает «готово закрытие сокета» после того, как функция вернула «что-то». Но клиент XML-RPC зависает, пока дочерний процесс все еще выполняется. Когда я завершаю дочерний процесс, клиент XML-RPC правильно завершает вызов RPC.
Мне кажется, что у меня проблема с fork()
копированием дескрипторов сокетов в дочерний процесс (родительский файл называется closesocket
, но дочернему по-прежнему принадлежит ссылка -> соединение все еще установлено). Как я могу обойти это?
РЕДАКТИРОВАТЬ: Я уже читал о FD_CLOEXEC
, но я не могу принудительно все дескрипторы, чтобы закрыть на exec
?