Выполнить функцию при выходе или завершении программы

У меня есть деструктор, который нужно вызывать, даже если программа неправильно завершена, чтобы гарантировать, что внешний процесс умирает.

В настоящее время я зарегистрировал деструктор для вызова

std::atexit(killprocess);
std::at_quick_exit(killprocess);

однако это означает, что когда программа завершена, но не завершена, процесс не прекращается. Есть ли какой-нибудь способ убедиться, что killprocess или деструктор вызывается либо при выходе, либо когда программа завершена, но не завершена?

Редактировать: готовое, но не завершенное состояние из Visual Studio, которое добавляет условие ожидания в конце. Я полагаю, это означает, что, зарегистрировав killprocess с помощью atexit, деструктор процесса не вызывается естественным образом в этой точке выполнения.

1

Решение

Я думаю, что вы задаете неправильный вопрос. Ваша цель — найти способ убедиться, что внешний процесс умирает, если родительский процесс умирает. Но нет способа гарантировать это, просто полагаясь на вызов некоторой функции в родительском процессе. Родительский процесс всегда может попасть в несогласованное состояние или иным образом неизбежно не вызвать эту функцию очистки. Таким образом, существуют некоторые другие механизмы для достижения желаемого поведения, такие как обработка некоторых видов сообщений активности в дочернем процессе. Например, вы можете предоставить канал из родительского процесса, поэтому, когда он по какой-либо причине завершает работу, конец канала родительского процесса автоматически закрывается системой, и дочерний процесс может выяснить, что ему нужно выйти.

1

Другие решения

Обработчик выхода, зарегистрированный std :: atexit, должен вызываться при нормальном завершении процесса. Если это не так, то вы должны искать в другом месте.
Смотрите документацию для станд :: atexit. Может быть, вы хотите установить станд :: set_terminate обработчик тоже.
Некоторые окончания программы не могут быть обработаны, поэтому, если вы хотите быть уверены, вам придется прибегнуть к какому-то внешнему мониторингу. Мало идей уже в комментариях.

1

По вопросам рекламы [email protected]