Я хотел порождать дочерний процесс из моего приложения так, чтобы его время жизни было связано, то есть когда мое приложение закрыто, дочерний процесс также закрывается. Чтобы добиться того же, я использовал boost::process::child::terminate()
,
Проблема с использованием terminate()
заключается в том, что порожденный дочерний процесс не знает, что он завершает свою работу, и поэтому не может предпринять необходимые шаги для обеспечения чистоты выхода (закрыть дескрипторы открытых файлов, освободить ресурсы и т. д.).
Без использования межпроцессного взаимодействия, есть ли способ обнаружить в дочернем процессе, что он завершается, или как-то сообщить об этом дочернему процессу?
Я пытался использовать следующие обработчики для перехвата завершения на дочернем конце, но безуспешно:
std::set_terminate(terminateHandler);
std::set_unexpected(unexpectedHandler);
SetUnhandledExceptionFilter(sehExceptionHandler);
_set_purecall_handler(pureCallHandler);
_set_new_handler(newMemoryExceptionHandler);
_set_invalid_parameter_handler(invalidParameterHandler);
_set_abort_behavior(_CALL_REPORTFAULT, _CALL_REPORTFAULT);
signal(SIGABRT, abortHandler);
signal(SIGINT, interruptionHandler);
signal(SIGTERM, terminationRequestHandler);
Какие-нибудь мысли?
Задача ещё не решена.
Других решений пока нет …